我想删除 MySQL 数据库中表的重复记录。
在该图像中,id 是自动递增的,但我希望customer_invoice_id是唯一的,但想删除重复的记录。EG 我想删除 1104 记录,但现在我删除了 1105,这是此查询的最新记录。
ALTER IGNORE TABLE table ADD UNIQUE KEY idx1(customer_invoice_id);
我想删除 MySQL 数据库中表的重复记录。
在该图像中,id 是自动递增的,但我希望customer_invoice_id是唯一的,但想删除重复的记录。EG 我想删除 1104 记录,但现在我删除了 1105,这是此查询的最新记录。
ALTER IGNORE TABLE table ADD UNIQUE KEY idx1(customer_invoice_id);
在设置约束之前,请先手动删除。
DELETE a
FROM tableName a
LEFT JOIN
(
SELECT customer_invoice_id, MAX(id) id
FROM tableName
GROUP BY customer_invoice_id
) b ON a.customer_invoice_id = b.customer_invoice_id AND
a.id = b.id
WHERE b.customer_invoice_id IS NULL
这将保留每个customer_invoice_id
. 你现在可以执行这个语句,
ALTER TABLE tableName ADD UNIQUE KEY idx1(customer_invoice_id)
演示,
您可以使用 LEFT JOIN 删除以查找具有更高 id 的重复项;
DELETE i1
FROM invoices i1
LEFT JOIN invoices i2
ON i1.customer_id = i2.customer_id
AND i1.customer_invoice_id = i2.customer_invoice_id
AND i1.id < i2.id
WHERE i2.customer_invoice_id IS NOT NULL
与往常一样,在从 Internet 上随机更新/删除数据之前备份您的数据 :)