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.