PostgreSQL 如何查找并删除重复数据
在PostgreSQL中,要查找并删除重复数据,通常的方法是使用窗口函数row_number()
来为每组重复数据分配一个唯一的序号,然后删除序号大于1的记录。以下是一个示例:
假设我们有一个名为duplicates_table
的表,其中有两列column1
和column2
,我们想要找出这两列上的重复行并删除除了第一条记录以外的所有重复记录。
WITH CTE AS (
SELECT *,
row_number() OVER (PARTITION BY column1, column2 ORDER BY column1, column2) AS rn
FROM duplicates_table
)
DELETE FROM CTE WHERE rn > 1;
在这个查询中,使用公用表表达式(CTE)首先为每组重复数据分配一个序号(rn)。PARTITION BY column1, column2
意味着重复项的组合将基于这两列。ORDER BY column1, column2
定义了组内记录的排序,这里我们按照column1
和column2
进行排序,但这个排序子句也可以根据需要进行调整。
最后,在CTE外部的DELETE语句中,我们删除所有序号(rn)大于1的行,即保留每组重复数据的第一条记录,删除其余的重复记录。
评论已关闭