UPDATE t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
SET t1.a = 'something',
t2.b = 42,
t3.c = t2.c
WHERE t1.a = 'blah';
Um zu sehen, was hier aktualisiert wird, können Sie dies in eine select-Anweisung konvertieren, z.
SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c
FROM t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
WHERE t1.a = 'blah';
Ein Beispiel mit denselben Tabellen wie die andere Antwort:
SELECT Books.BookID, Orders.OrderID,
Orders.Quantity AS CurrentQuantity,
Orders.Quantity + 2 AS NewQuantity,
Books.InStock AS CurrentStock,
Books.InStock - 2 AS NewStock
FROM Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
WHERE Orders.OrderID = 1002;
UPDATE Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
SET Orders.Quantity = Orders.Quantity + 2,
Books.InStock = Books.InStock - 2
WHERE Orders.OrderID = 1002;
BEARBEITEN:
Fügen wir zum Spaß etwas Interessanteres hinzu.
Angenommen, Sie haben eine Tabelle von books
und eine Tabelle von authors
. Du books
hast eine author_id
. Bei der ursprünglichen Erstellung der Datenbank wurden jedoch keine Fremdschlüsseleinschränkungen eingerichtet. Später führte ein Fehler im Front-End-Code dazu, dass einige Bücher mit ungültigen author_id
s hinzugefügt wurden . Als DBA möchten Sie nicht alle diese Punkte durchgehen müssen, um books
zu überprüfen, was author_id
sein soll. Daher wird die Entscheidung getroffen, dass die Datenerfassungsgeräte den books
Hinweis nach rechts korrigieren authors
. Aber es gibt zu viele Bücher, um sie durchzugehen, und sagen wir, Sie wissen, dass diejenigen, die eine haben author_id
, die einer tatsächlichen entspricht, author
korrekt sind. Es sind nur diejenigen, die nicht existierenauthor_id
s, die ungültig sind. Es gibt bereits eine Benutzeroberfläche, über die die Benutzer die Buchdetails aktualisieren können, und die Entwickler möchten dies nicht nur für dieses Problem ändern. Da die vorhandene Benutzeroberfläche dies jedoch tut INNER JOIN authors
, werden alle Bücher mit ungültigen Autoren ausgeschlossen.
Was Sie tun können, ist Folgendes: Fügen Sie einen gefälschten Autorendatensatz wie "Unbekannter Autor" ein. Aktualisieren Sie dann author_id
alle fehlerhaften Datensätze, um auf den unbekannten Autor zu verweisen. Anschließend können die Datenerfassungsgeräte nach allen Büchern suchen, bei denen der Autor auf "Unbekannter Autor" eingestellt ist, den richtigen Autor suchen und diese korrigieren.
Wie aktualisieren Sie alle fehlerhaften Datensätze, um auf den unbekannten Autor zu verweisen? So (vorausgesetzt, der unbekannte Autor author_id
ist 99999):
UPDATE books
LEFT OUTER JOIN authors ON books.author_id = authors.id
SET books.author_id = 99999
WHERE authors.id IS NULL;
Die oben genannten werden auch aktualisiert books
, die einen NULL
author_id
an den unbekannten Autor haben. Wenn Sie das nicht wollen, können Sie natürlich hinzufügen AND books.author_id IS NOT NULL
.