如何删除没有主键的PostgreSQL表中100%重复的行? [重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我有一个带有大量列的PostgreSQL表。该表没有主键,现在包含几行,它们是另一行的100%复制。

如何删除这些重复项而不删除原始副本?

Bonus:我想避免拼写每个列名。

示例:

给出

create table duplicated (
 id int,
 name text,
 description text
);

insert into duplicated
values (1, 'A', null), 
       (2, 'B', null),
       (2, 'B', null),
       (3, 'C', null), 
       (3, 'C', null), 
       (3, 'C', 'not a DUPE!');

删除后,应保留以下行:

(1, 'A', null) 
(2, 'B', null)
(3, 'C', null) 
(3, 'C', 'not a DUPE!')
postgresql duplicates sql-delete
1个回答
0
投票

使用system column ctid区分其他相同行的物理副本:

ctid

您可以在此DELETE FROM duplicated USING ( SELECT MIN(ctid) as ctid, row(duplicated) as row FROM duplicated GROUP BY row(duplicated) HAVING COUNT(*) > 1 ) uniqued WHERE row(duplicated) = uniqued.row AND duplicated.ctid <> uniqued.ctid; 中尝试。

© www.soinside.com 2019 - 2024. All rights reserved.