MySQL Ralat: Jadual Ditentukan Dua Kali
Apabila cuba mengemas kini jadual sambil turut menggunakannya sebagai sumber data, MySQL mungkin mengeluarkan ralat menunjukkan bahawa jadual ditentukan dua kali. Ini biasanya berlaku apabila menggunakan subkueri dengan pengalian jadual.
Sebagai contoh, pertimbangkan pertanyaan berikut:
UPDATE manager AS m1 SET m1.status = 'Y' WHERE m1.branch_id IN ( SELECT m2.branch_id FROM manager AS m2 WHERE (m2.branch_id, m2.year) IN ( SELECT DISTINCT branch_id, year FROM branch_master WHERE type = 'finance' ) );
Pertanyaan ini cuba mengemas kini jadual pengurus berdasarkan subkueri yang menyemak sama ada medan tertentu dalam nilai padanan pengurus daripada jadual branch_master di mana jenisnya ialah 'kewangan'. Walau bagaimanapun, MySQL membantah fakta bahawa jadual pengurus digunakan sebagai sasaran (dalam klausa KEMASKINI) dan sebagai sumber data (dalam subkueri).
Untuk menyelesaikan isu ini dan menghalang "Jadual ialah dinyatakan ralat dua kali", kita boleh menggunakan jadual terbitan untuk subquery. Ini melibatkan mencipta jadual sementara berdasarkan jadual asal, kemudian memilih daripada jadual terbitan itu:
FROM (SELECT * FROM manager) AS m2
Dengan melampirkan jadual pengurus asal dalam kurungan dan mengalikan hasilnya sebagai m2, kami mencipta jadual terbitan baharu. Ini membolehkan kami memilih data daripada jadual pengurus tanpa menyatakan secara eksplisit nama pengurus dua kali.
Pertanyaan Kemas Kini:
UPDATE manager SET status = 'Y' WHERE branch_id IN ( SELECT branch_id FROM (SELECT * FROM manager) AS m2 WHERE (m2.branch_id, m2.year) IN ( SELECT branch_id, year FROM branch_master WHERE type = 'finance' ) );
Pertanyaan yang dikemas kini ini dengan betul menggunakan jadual terbitan untuk subkueri, menyelesaikan Ralat "Jadual ditentukan dua kali" dan membenarkan pertanyaan untuk dilaksanakan dengan jayanya.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Jadual Ditentukan Dua Kali' dalam MySQL Apabila Menggunakan Subqueries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!