PSQL获得重复行 [英] PSQL get duplicate row

查看:155
本文介绍了PSQL获得重复行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的表 -

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                  

我想删除除这些以外的所有行 -

I want to delete all rows except these-

1         1                 1      
4         2                 2
6         3                 2         
9         1                 2         

基本上有重复的,我想删除它们,但是保持一个副本不变。

Basically there are duplicates and I want to remove them but keep one copy intact.

这是最有效的方式?

推荐答案

如果这是一次性的话,那么你可以简单地确定要保留的记录如下:

If this is a one-off then you can simply identify the records you want to keep like so:

SELECT MIN(id) AS id
FROM yourtable
GROUP BY object_id, product_id;

你想检查这个工作,然后再做下一件事,实际上会抛出记录。要实际删除您所做的重复记录:

You want to check that this works before you do the next thing and actually throw records out. To actually delete those duplicate records you do:

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的记录。根据需要进行更改。

The MIN(id) obviously always returns the record with the lowest id for a set of (object_id, product_id). Change as desired.

这篇关于PSQL获得重复行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆