Mengatasi Ralat MySQL 1093: "Tidak Dapat Menentukan Jadual Sasaran untuk Kemas Kini dalam Klausa FROM"
Apabila menghadapi Ralat MySQL 1093, adalah penting untuk memahami isu yang mendasari. Ralat ini berlaku apabila cuba mengubah suai jadual yang turut dirujuk dalam klausa FROM pertanyaan.
Punca Punca
MySQL tidak membenarkan jadual diubah suai secara serentak dan digunakan dalam klausa FROM bagi pernyataan KEMASKINI atau PADAM. Sekatan ini disebabkan oleh kekaburan yang akan timbul daripada mengakses jadual yang sama untuk kedua-dua operasi.
Penyelesaian 1: Menggunakan Subkueri
Satu penyelesaian adalah dengan membenamkan SELECT kenyataan yang mengenal pasti entri yang rosak sebagai subkueri dalam klausa FROM bagi KEMASKINI atau PADAM pernyataan:
UPDATE story_category SET category_id = NULL WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id );
Penyelesaian 2: Menyertai Sendiri Meja
Sebagai alternatif, anda boleh menyertai sendiri jadual untuk mencipta alias berasingan untuk jadual yang sama, membenarkan anda untuk mengubah suai salah satu alias sambil merujuk yang lain. Contohnya:
UPDATE story_category AS updated INNER JOIN story_category AS original ON updated.category_id = original.category_id SET updated.category_id = NULL WHERE original.category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id );
Mengelakkan Berulang
Setelah entri rasuah telah dipadamkan, pertimbangkan untuk melaksanakan kekangan pada jadual story_category untuk mengelakkan entri tidak sah pada masa hadapan:
ALTER TABLE story_category ADD FOREIGN KEY (category_id) REFERENCES category(id);
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat MySQL 1093: 'Tidak Dapat Menentukan Jadual Sasaran untuk Kemas Kini dalam Klausa FROM'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!