PSQL获得重复行

时间:2014-05-16 00:35:32

标签: sql postgresql duplicates

我有这样的表 -

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         

基本上有重复项,我想删除它们,但保留一份副本。

最有效的方式是什么?

1 个答案:

答案 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_idproduct_id)ID最低的记录。根据需要改变。