Mysql

如何在沒有 ID 的表中刪除 MySQL 中的重複記錄?

  • December 4, 2020

我需要刪除此表中的重複記錄。但是,id每一行都沒有。

範例數據

預期成績

我需要得到這個結果。

帶 ID 的腳本

如果有一個id,我可以使用:

DELETE p1 FROM products p1
INNER JOIN products p2 
WHERE p1.id < p2.id AND p1.product = p2.product;

沒有任何欄位組合可以唯一地標識記錄。

我看到至少 2 種不同的解決方案。

第一種解決方案:將唯一記錄移動到表的副本並替換原始表。

CREATE TABLE temp LIKE products;
INSERT INTO temp 
   SELECT DISTINCT * FROM products;
DROP TABLE products;
RENAME TABLE temp TO products;

第二種解決方案:添加臨時自動增量,使用它刪除記錄,並刪除臨時欄位。

ALTER TABLE products ADD COLUMN temp SERIAL PRIMARY KEY;
DELETE t1.* 
   FROM products t1 
   LEFT JOIN ( SELECT MIN(temp) mintemp 
               FROM products
               GROUP BY field1,field2 /* , ... */ , fieldN) t2 
       ON t1.temp=t2.mintemp 
   WHERE t2.mintemp IS NULL;
ALTER TABLE products DROP COLUMN temp;


更新

在第二個變體中:作為主鍵的附加列定義是多餘的。使用就足夠了

ALTER TABLE products ADD COLUMN temp SERIAL;

引用自:https://dba.stackexchange.com/questions/214946