如何删除postgresql中的重复行

时间:2018-06-10 06:26:20

标签: sql postgresql

我想在postgresql中删除重复的条目。没有唯一约束,但我想将所有列一起考虑将行视为重复。

我在表格中有列名称: 日期(日期),姓名(文本),年龄(整数),分数(双)

我想将所有列一起考虑为一个副本。如何在Postgresql中实现这一点。

2 个答案:

答案 0 :(得分:1)

PostgreSQL分配一个ctid伪列来标识每行的物理位置。您可以使用它来标识具有相同值的不同行:

-- Create the table
CREATE TABLE my_table (num1 NUMERIC, num2 NUMERIC);

-- Create duplicate data
INSERT INTO my_table VALUES (1, 2);
INSERT INTO my_table VALUES (1, 2);

-- Remove duplicates
DELETE FROM my_table
WHERE ctid IN (SELECT ctid
               FROM   (SELECT ctid,
                              ROW_NUMBER() OVER (
                                PARTITION BY num1, num2) AS rn
                       FROM   my_table) t
               WHERE  rn > 1);

<强> DB Fiddle

答案 1 :(得分:0)

假设您的表有2列,您可以使用标识重复项。 发布这个: -

1)将此结果插入临时表

2)从主表中删除数据

3)将临时表中的数据插入主表

4)删除临时表。

select col1, col2, count(*) as cnt
from table1
group by col1, col2
having  cnt > 1