Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Membetulkan Ralat MySQL 1093: 'Tidak dapat menentukan jadual sasaran untuk kemas kini dalam klausa FROM'?

Bagaimanakah Saya Boleh Membetulkan Ralat MySQL 1093: 'Tidak dapat menentukan jadual sasaran untuk kemas kini dalam klausa FROM'?

Susan Sarandon
Susan Sarandonasal
2024-12-23 16:11:11859semak imbas

How Can I Fix MySQL Error 1093:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn