Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Membuang Ralat 1093 Apabila Mengemas kini Jadual Menggunakan Subkueri?

Mengapa MySQL Membuang Ralat 1093 Apabila Mengemas kini Jadual Menggunakan Subkueri?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 00:11:23522semak imbas

Why Does MySQL Throw Error 1093 When Updating a Table Using a Subquery?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn