我有这样的表 -
id object_id product_id
1 1 1
2 1 1
4 2 2
6 3 2
7 3 2
8 1 2
9 1 1
我想删除除这些之外的所有行 -
1 1 1
4 2 2
6 3 2
9 1 2
基本上有重复项,我想删除它们,但保留一份副本。
最有效的方式是什么?
答案 0 :(得分:1)
如果这是一次性的,那么您可以简单地识别您想要保留的记录:
SELECT MIN(id) AS id
FROM yourtable
GROUP BY object_id, product_id;
你想在做下一件事之前检查这是否有效并实际抛出记录。要实际删除这些重复记录,请执行以下操作:
DELETE FROM yourtable WHERE id NOT IN (
SELECT MIN(id) AS id
FROM yourtable
GROUP BY object_id, product_id
);
MIN(id)
显然总是返回一组(object_id
,product_id
)ID最低的记录。根据需要改变。