Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除postgresql中的重复行_Sql_Postgresql - Fatal编程技术网

如何删除postgresql中的重复行

如何删除postgresql中的重复行,sql,postgresql,Sql,Postgresql,我想删除postgresql中的重复条目。没有唯一的约束,但我想把所有列都考虑在一起,把行看作一个重复。< /P> 表中的列名如下所示: 日期(日期)、姓名(文本)、年龄(整数)、分数(双倍) 我想把所有的列一起考虑,把它看成是一个复制品。如何在Postgresql中实现这一点。假设您的表有两列,您可以使用。 张贴此:- 1) 将此结果插入临时表 2) 从主表中删除数据 3) 将临时表中的数据插入主表 4) 下降温度表 select col1, col2, count(*) as cnt fro

我想删除postgresql中的重复条目。没有唯一的约束,但我想把所有列都考虑在一起,把行看作一个重复。< /P> 表中的列名如下所示: 日期(日期)、姓名(文本)、年龄(整数)、分数(双倍)


我想把所有的列一起考虑,把它看成是一个复制品。如何在Postgresql中实现这一点。

假设您的表有两列,您可以使用。 张贴此:-

1) 将此结果插入临时表

2) 从主表中删除数据

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

4) 下降温度表

select col1, col2, count(*) as cnt
from table1
group by col1, col2
having  cnt > 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);

你试过什么?你的模式是什么?示例数据是什么?您是否尝试在所有列上使用DISTINCT?您所说的“删除”是什么意思?在查询中或在数据本身中?是否有方法直接从表中删除找到的重复数据?答案中提到的SQL也会这样做。