Mysql
如何在沒有 ID 的表中刪除 MySQL 中的重複記錄?
我需要刪除此表中的重複記錄。但是,
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;