首頁 >資料庫 >mysql教程 >MySQL 5.0中如何有效率地刪除具有非唯一ID的行?

MySQL 5.0中如何有效率地刪除具有非唯一ID的行?

DDD
DDD原創
2024-12-25 16:48:15402瀏覽

How to Efficiently Delete Rows with Non-Unique IDs in MySQL 5.0?

修正刪除非唯一 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn