MySQL Ralat 1093: Kemas Kini Jadual Sasaran dalam Subkueri
Apabila cuba melaksanakan pertanyaan berikut dalam MySQL:
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Anda mungkin mengalami ralat berikut:
#1093 - You can't specify target table 'giveaways' for update in FROM clause
Ralat ini berlaku kerana MySQL tidak membenarkan jadual sasaran pernyataan UPDATE (pemberian hadiah) digunakan dalam subkueri dalam klausa WHERE.
Menyesuaikan Penyelesaian daripada Artikel Rujukan
Untuk menyelesaikan isu ini, sesuaikan penyelesaian yang disediakan dalam artikel yang anda rujuk dengan menggunakan subkueri bersarang. Berikut ialah pertanyaan yang dikemas kini:
UPDATE giveaways SET winner='1' WHERE Id = (SELECT Id FROM (SELECT MAX(Id) AS id FROM giveaways) AS t)
Pertanyaan ini secara berkesan memilih nilai Id maksimum daripada jadual hadiah sebagai subkueri (t) dan kemudian menggunakan nilai itu untuk mengemas kini lajur pemenang dalam pertanyaan luar.
Dengan menyarangkan subkueri, anda mengelak daripada menentukan jadual sasaran (pemberian) dalam klausa FROM subkueri, sekali gus menyelesaikan ralat.
Atas ialah kandungan terperinci Mengapa MySQL Membuang Ralat 1093 Apabila Mengemas kini Jadual Menggunakan Subkueri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!