我有一个表,在一列或两列中有重复数据。我想删除重复的数据,只保留一条记录。
我尝试了以下代码,但它删除了我的表中的所有数据。
DELETE from test del
WHERE EXISTS (
SELECT *
FROM test ex
WHERE ex.name= del.name
);发布于 2019-03-26 01:29:46
如果没有主键,区分重复行的诀窍是使用ctid,它是标识行的(非持久性)物理位置的伪列。两行不能具有相同的ctid,并且ctid可以相互比较。
下面的查询添加条件,针对每个重复项区分要删除的行和要保留的行。
DELETE from test del
WHERE EXISTS (
SELECT *
FROM test ex
WHERE ex.name= del.name
AND ex.ctid > del.ctid
);发布于 2019-03-26 00:41:56
如果你的数据有一个主键,那么你可以这样做:
delete from test t
where t.pk in (select min(t2.pk) from test t2 group by t2.name);https://stackoverflow.com/questions/55342062
复制相似问题