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 books
dan tabel authors
. Anda books
punya 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_id
s yang tidak valid . Sebagai seorang DBA Anda tidak ingin harus melalui semua ini books
untuk memeriksa apa yang author_id
seharusnya, sehingga keputusan dibuat bahwa penangkap data akan memperbaiki books
untuk menunjuk ke kanan authors
. Tetapi ada terlalu banyak buku untuk dibaca masing-masing dan katakanlah Anda tahu bahwa orang-orang yang memiliki author_id
yang sesuai dengan yang sebenarnya author
sudah benar. Hanya yang tidak adaauthor_id
s 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_id
semua 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_id
adalah 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_id
ke penulis Tidak Dikenal. Jika Anda tidak menginginkannya, tentu saja Anda dapat menambahkan AND books.author_id IS NOT NULL
.