Ralat MySQL 1093: Memahami dan Mengatasi Sekatan
Dalam MySQL, cuba mengubah suai jadual yang turut dirujuk dalam klausa FROM bagi pertanyaan yang sama boleh mengakibatkan ralat: "Anda tidak boleh menentukan jadual sasaran 'nama_jadual' untuk kemas kini dalam FROM fasal." Sekatan ini timbul daripada ketidakupayaan MySQL untuk melaksanakan operasi sedemikian secara langsung.
Untuk menyelesaikan isu ini, beberapa pendekatan boleh dipertimbangkan:
Menyertai Jadual dengan Sendiri
Satu pilihan adalah untuk menggabungkan jadual dengan dirinya sendiri dengan kriteria pemilihan yang sesuai, mewujudkan dua contoh jadual yang berbeza dari perspektif MySQL. Ini membolehkan operasi yang merosakkan dilakukan pada satu kejadian sementara membiarkan yang lain tidak disentuh.
Syarikat Subkueri dalam Klausa FROM
Penyelesaian alternatif melibatkan penentuan subkueri yang menjana sasaran baris untuk pemadaman dalam klausa FROM yang lebih mendalam. Ini mencipta jadual sementara tersirat daripada subquery, yang MySQL mengiktiraf sebagai entiti yang berasingan daripada jadual sasaran. Walau bagaimanapun, pendekatan ini mungkin memberi kesan kepada prestasi.
Melumpuhkan Pengoptimuman Pengoptimum (MySQL 5.7.6 dan lebih baru)
Bermula dengan MySQL 5.7.6, pengoptimum boleh mengoptimumkan subquery dalam klausa FROM, menyebabkan ralat berterusan. Untuk mengatasinya, lumpuhkan pengoptimuman menggunakan pembolehubah optimizer_switch:
SET optimizer_switch = 'derived_merge=off';
Perhatikan bahawa ini disyorkan sebagai penyelesaian jangka pendek atau untuk tugas kecil sekali sahaja, kerana ia mungkin memberi kesan negatif terhadap prestasi pertanyaan keseluruhan.
Kesimpulan
Ralat "Anda tidak boleh menentukan jadual sasaran 'table_name' untuk kemas kini dalam klausa FROM" berpunca daripada had MySQL dalam mengubah suai jadual yang juga digunakan dalam klausa FROM. Dengan menggunakan kaedah yang digariskan di atas, pembangun boleh mengatasi sekatan ini dan melaksanakan operasi yang diingini pada data mereka.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat MySQL 1093: 'Anda tidak boleh menentukan jadual 'table_name' untuk kemas kini dalam klausa FROM'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!