Du kan gå med i ytterligare tabeller i en UPDATE
uttalande, vilket tillåter denna föredragna form:
UPDATE books b
SET author_id = a.author_id
FROM authors a
WHERE b.author = a.author_name;
Tre skäl:
-
Det är säkrare. Din fråga kommer att skriva ett NULL-värde i varje rad där ingen matchande författare hittas. Det verkar inte spela någon roll i ditt fall, men kan potentiellt leda till dataförlust i liknande frågor där du redan har data i kolumnen som ska uppdateras. Mitt alternativ gör ingenting om ingen matchande författare hittas.
-
Det är snabbare. Ovanstående för en. Men också för att korrelerade underfrågor som att du har skala fruktansvärt. Att gå med i en tabell är i allmänhet snabbare, särskilt med fler än ett par rader.
-
Det är renare och lättare att anpassa till ytterligare kolumner.