Możesz dołączyć do dodatkowych stołów w UPDATE
oświadczenie, uwzględniając tę preferowaną formę:
UPDATE books b
SET author_id = a.author_id
FROM authors a
WHERE b.author = a.author_name;
Trzy powody:
-
To jest bezpieczniejsze. Twoje zapytanie zapisze wartość NULL w każdym wierszu, w którym nie znaleziono pasującego autora. Nie wydaje się to mieć znaczenia w Twoim przypadku, ale może potencjalnie prowadzić do utraty danych w podobnych zapytaniach, w których masz już dane w kolumnie do zaktualizowania.Moja alternatywa nic nie daje, jeśli nie zostanie znaleziony pasujący autor.
-
To jest szybsze. Powyższe za jeden. Ale także dlatego, że skorelowane podzapytania jak strasznie masz skalę. Łączenie w tabeli jest generalnie szybsze, zwłaszcza przy więcej niż kilku rzędach.
-
Jest czystszy i łatwiejszy do dostosowania do dodatkowych kolumn.