我想在postgresql中删除重复的条目。没有唯一约束,但我想将所有列一起考虑将行视为重复。
我在表格中有列名称: 日期(日期),姓名(文本),年龄(整数),分数(双)
我想将所有列一起考虑为一个副本。如何在Postgresql中实现这一点。
答案 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