Jadual Ditentukan Dua Kali: Menyelesaikan Konflik Kemas Kini dalam MySQL
Apabila cuba mengemas kini jadual yang muncul sebagai kedua-dua sasaran untuk kemas kini dan berasingan sumber data, MySQL mungkin menimbulkan ralat "Jadual 'table_name' ditentukan dua kali, kedua-duanya sebagai sasaran untuk 'KEMASKINI' dan sebagai sumber berasingan untuk data." Isu ini timbul apabila anda merujuk jadual yang sama beberapa kali dalam pertanyaan anda.
Secara khusus, mesej ralat ini menunjukkan bahawa jadual pengurus sedang digunakan sebagai jadual sasaran untuk operasi KEMASKINI dan sebagai sumber data untuk memilih data daripada jadual branch_master. Rujukan berganda ini boleh mengelirukan MySQL.
Penyelesaian
Penyelesaian adalah untuk mengasingkan jadual dalam sumber data anda ke dalam jadual terbitan, iaitu jadual sementara yang dibuat pada terbang untuk menyimpan data dari jadual asal. Dengan melakukan ini, anda boleh mengelakkan kekaburan dalam pertanyaan anda.
Ganti baris berikut dalam pertanyaan anda:
FROM manager AS m2
dengan:
FROM (select * from manager) AS m2
Ini akan mewujudkan jadual terbitan dipanggil m2 yang mengandungi semua data daripada jadual pengurus asal.
Dikemas kini Pertanyaan
Berikut ialah pertanyaan yang dikemas kini yang akan menyelesaikan ralat konflik jadual:
UPDATE manager SET status = 'Y' WHERE branch_id IN ( select branch_id FROM (select * from manager) AS m2 WHERE (branch_id, year) IN ( SELECT branch_id, year FROM branch_master WHERE type = 'finance' ) );
Dengan menggunakan jadual terbitan, anda boleh memastikan bahawa jadual pengurus dirujuk sekali sahaja dalam pertanyaan anda, menghalang MySQL daripada menghadapi ralat "Table specified twice".
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Jadual Ditentukan Dua Kali' dalam Pertanyaan KEMASKINI MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!