PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je insérer dans une table à partir d'une autre table en faisant correspondre les valeurs ?

Vous pouvez joindre des tables supplémentaires dans un UPDATE déclaration, autorisant cette forme préférable :

UPDATE books b
SET    author_id = a.author_id
FROM   authors a
WHERE  b.author = a.author_name;

Trois raisons :

  • C'est plus sûr. Votre requête écrira une valeur NULL dans chaque ligne où aucun auteur correspondant n'est trouvé. Cela n'a pas d'importance dans votre cas, mais peut potentiellement entraîner une perte de données dans des requêtes similaires où vous avez déjà des données dans la colonne à mettre à jour. Mon alternative ne fait rien si aucun auteur correspondant n'est trouvé.

  • C'est plus rapide. Le ci-dessus pour un. Mais aussi parce que sous-requêtes corrélées comme vous avez terriblement échelle. Joindre un tableau est généralement plus rapide, surtout avec plus de quelques lignes.

  • C'est plus propre et plus facilement adaptable à des colonnes supplémentaires.