Rumah > pangkalan data > tutorial mysql > Bagaimana Menggunakan Subqueries dengan Benar dalam MySQL DELETE Statement untuk Mengelakkan Ralat Sintaks?

Bagaimana Menggunakan Subqueries dengan Benar dalam MySQL DELETE Statement untuk Mengelakkan Ralat Sintaks?

Susan Sarandon
Lepaskan: 2025-01-10 18:01:44
asal
142 orang telah melayarinya

How to Correctly Use Subqueries in MySQL DELETE Statements to Avoid Syntax Errors?

Penyataan MySQL DELETE menggunakan subquery sebagai syarat

Dalam MySQL, pernyataan DELETE membolehkan anda memadamkan baris daripada jadual berdasarkan syarat yang ditentukan. Situasi biasa adalah menggunakan subqueries untuk menentukan keadaan. Walau bagaimanapun, ia boleh mengecewakan untuk menghadapi ralat sintaks apabila cuba melakukan ini.

Seorang pengguna cuba memadamkan baris daripada jadual term_hierarchy menggunakan pertanyaan berikut:

<code class="language-sql">DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
    SELECT DISTINCT(th1.tid)
    FROM term_hierarchy AS th1
    INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
    WHERE th1.parent = 1015
);</code>
Salin selepas log masuk

Walau bagaimanapun, ini mengakibatkan ralat berikut:

<code>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS th
WHERE th.parent = 1015 AND th.tid IN (
  SELECT DISTINCT(th1.tid)
  FROM ter' at line 1</code>
Salin selepas log masuk

Masalahnya di sini ialah pengehadan MySQL: jadual yang dipadamkan (term_hierarchy dalam kes ini) tidak dibenarkan untuk digunakan dalam subkueri keadaan. Sekatan ini menghalang anda daripada merujuk jadual sendiri dalam kenyataan DELETE.

Penyelesaian:

Untuk mengatasi had ini, anda boleh menggunakan subkueri bersarang yang merujuk subkueri tanpa memasukkan jadual yang akan dipadamkan. Pertanyaan yang diubah suai berikut menunjukkan ini:

<code class="language-sql">DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM (SELECT id
                   FROM tableE
                   WHERE arg = 1 AND foo = 'bar') x);</code>
Salin selepas log masuk

Dengan membungkus subkueri dalam subkueri lain (bernama x dalam contoh ini), MySQL boleh melakukan operasi pemadaman tanpa melanggar sekatan rujukan kendiri.

Atas ialah kandungan terperinci Bagaimana Menggunakan Subqueries dengan Benar dalam MySQL DELETE Statement untuk Mengelakkan Ralat Sintaks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan