使用子查詢作為條件的MySQL DELETE語句
在MySQL中,DELETE語句可讓您根據指定的條件刪除表格中的行。常見的情況是使用子查詢來定義條件。但是,嘗試這樣做時遇到語法錯誤可能會令人沮喪。
一位使用者嘗試使用以下查詢從term_hierarchy表中刪除行:
<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>
但是,這導致了以下錯誤:
<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>
這裡的問題在於MySQL的限制:不允許將要刪除的表(在本例中為term_hierarchy)用於條件的子查詢中。此限制阻止您在DELETE語句中自引用表。
解決方法:
為了解決此限制,您可以使用巢狀子查詢,該查詢引用子查詢而不包含要刪除的表。以下修改後的查詢示範了這一點:
<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>
透過將子查詢包裝在另一個子查詢中(在此範例中命名為x),MySQL可以在不違反自引用限制的情況下執行刪除操作。
以上是如何在MySQL DELETE語句中正確使用子查詢以避免語法錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!