Mengatasi Ralat MySQL 1093: Mengemas kini Jadual Ditentukan dalam Klausa FROM
Ralat MySQL 1093 timbul apabila cuba mengemas kini jadual yang turut digunakan dalam klausa FROM bagi pertanyaan yang sama. Untuk menyelesaikan ralat ini, pertimbangkan pendekatan berikut:
Menyertakan Jadual dengan Sendiri
Jika boleh, sertakan jadual itu sendiri menggunakan kriteria pemilihan yang sesuai. Ini membolehkan MySQL melihat jadual sebagai entiti yang berasingan dan membenarkan pengubahsuaian yang merosakkan:
UPDATE tbl AS a INNER JOIN tbl AS b ON .... SET a.col = b.col
Menyarang Subkueri Dengan Lebih Dalam dalam Klausa FROM
Sebagai alternatif, sarang subquery lebih mendalam ke dalam klausa FROM untuk mencipta sementara tersirat jadual:
UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x);
Walau bagaimanapun, kaedah ini kurang cekap dan mungkin tidak dioptimumkan dengan betul oleh pengoptimum pertanyaan MySQL dalam versi tertentu.
Melumpuhkan Pengoptimum Pertanyaan
Dalam MySQL versi 5.7.6 dan lebih tinggi, pengoptimum mungkin menghalang strategi subquery. Untuk melumpuhkan pengoptimuman buat sementara waktu, tetapkan pembolehubah optimizer_switch:
SET optimizer_switch = 'derived_merge=off';
Contoh Pertanyaan Pemadaman
Untuk menangani pertanyaan khusus yang disediakan dalam soalan, sertai jadual story_category ke jadual kategori untuk mengenal pasti dan memadam entri yang rosak:
DELETE t1 FROM story_category AS t1 INNER JOIN category AS t2 ON t1.category_id = t2.id WHERE t2.id IS NULL;
Kesimpulannya, dengan menggunakan teknik ini, anda boleh mengatasi ralat "Tidak dapat menentukan jadual sasaran untuk kemas kini dalam klausa FROM" dan melakukan pengubahsuaian yang diperlukan pada jadual pangkalan data anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membetulkan 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!