删除重复数据

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

管理片段

删除重复数据

适用于 PostgreSQL

8.4+

编写语言

SQL

依赖于


IRC 中一个常见的问题是如何删除在一组列上重复的行,只保留具有最低 ID 的行。

此查询适用于所有具有相同 column1、column2 和 column3 的 tablename 行。

DELETE FROM tablename
WHERE id IN (
    SELECT
        id
    FROM (
        SELECT
            id,
            row_number() OVER w as rnum
        FROM tablename
        WINDOW w AS (
            PARTITION BY column1, column2, column3
            ORDER BY id
        )

    ) t
WHERE t.rnum > 1);

有时会使用 timestamptz 字段代替 ID 字段。