修正刪除非唯一 ID 的 MySQL 查詢
提供的查詢在 MySQL 5.0 中無法運作。本文解決了這個問題,並提供了在 MySQL 中刪除具有非唯一 ID 的行的替代解決方案。
原始問題:
DELETE FROM posts WHERE>
解釋:
此查詢嘗試從「posts」表中刪除「id 」與在表中出現多次的行的「id」。但是,在 MySQL 5.0 中,無法使用子查詢作為 DELETE 語句中的條件。
解:
1.使用IN 子句:
不要使用“=”,而是將條件變更為“IN”,以將“id”與子查詢的結果集進行比較。
DELETE FROM posts WHERE id IN ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) )
2.分離 SELECT 和 DELETE 查詢:
將子查詢(SELECT 語句)與 DELETE 語句分離並依序執行。
SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) INTO @duplicate_ids; DELETE FROM posts WHERE id IN (@duplicate_ids);
3.帶別名的巢狀子查詢:
巢狀子查詢並為要在 DELETE 語句中使用的結果起別名。
DELETE FROM posts WHERE id IN ( SELECT * FROM ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) ) AS p )
4.使用 JOIN:
使用 JOIN 將表格的「id」與子查詢的結果集進行比較。
DELETE a.id FROM posts AS a JOIN ( SELECT id, COUNT(*) AS num FROM posts GROUP BY id HAVING num > 1 ) AS b ON a.id = b.id
以上是MySQL 5.0中如何有效率地刪除具有非唯一ID的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!