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';
Untuk melihat apa yang akan diperbarui, Anda dapat mengonversinya menjadi pernyataan pilihan, misalnya:
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';
Contoh menggunakan tabel yang sama dengan jawaban lainnya:
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;
EDIT:
Hanya untuk bersenang-senang, mari tambahkan sesuatu yang sedikit lebih menarik.
Katakanlah Anda memiliki tabel booksdan tabel authors. Anda bookspunya author_id. Tetapi ketika database awalnya dibuat, tidak ada batasan kunci asing yang diatur dan kemudian bug dalam kode front-end menyebabkan beberapa buku ditambahkan dengan author_ids yang tidak valid . Sebagai seorang DBA Anda tidak ingin harus melalui semua ini booksuntuk memeriksa apa yang author_idseharusnya, sehingga keputusan dibuat bahwa penangkap data akan memperbaiki booksuntuk menunjuk ke kanan authors. Tetapi ada terlalu banyak buku untuk dibaca masing-masing dan katakanlah Anda tahu bahwa orang-orang yang memiliki author_idyang sesuai dengan yang sebenarnya authorsudah benar. Hanya yang tidak adaauthor_ids yang tidak valid. Sudah ada antarmuka bagi pengguna untuk memperbarui detail buku dan pengembang tidak ingin mengubahnya hanya untuk masalah ini. Tetapi antarmuka yang ada melakukan INNER JOIN authors, sehingga semua buku dengan penulis yang tidak valid dikecualikan.
Yang dapat Anda lakukan adalah ini: Masukkan catatan penulis palsu seperti "Penulis tidak dikenal". Kemudian perbarui author_idsemua catatan buruk untuk menunjuk ke penulis tidak dikenal. Kemudian penangkap data dapat mencari semua buku dengan penulis disetel ke "Penulis tidak dikenal", mencari penulis yang benar dan memperbaikinya.
Bagaimana Anda memperbarui semua catatan buruk yang mengarah ke penulis tidak dikenal? Seperti ini (dengan asumsi penulis tidak dikenal author_idadalah 99999):
UPDATE books
LEFT OUTER JOIN authors ON books.author_id = authors.id
SET books.author_id = 99999
WHERE authors.id IS NULL;
Di atas juga akan memperbarui books yang memiliki NULL author_idke penulis Tidak Dikenal. Jika Anda tidak menginginkannya, tentu saja Anda dapat menambahkan AND books.author_id IS NOT NULL.