【问题标题】:SQL - Redshift remove duplicate rows without primary keySQL - Redshift 删除没有主键的重复行
【发布时间】:2017-03-14 03:55:49
【问题描述】:

我有一个很大的红移数据库。 记录没有唯一键。

我想把下面的 sql 转换成 postgresql。

DELETE FROM (
SELECT *,ROW_NUMBER() OVER (partition BY column1, column2, column3) AS rnum
FROM tablename ) t1
WHERE t1.rnum > 1;

执行上面的sql,出现如下错误:

亚马逊无效操作:“(”或附近的语法错误;

请:'( .

【问题讨论】:

    标签: sql duplicates amazon-redshift


    【解决方案1】:

    在 Postgres 中,您可以使用 ctid 执行此操作。这是一个系统“列”,物理上标识每一行。

    想法是:

    delete from tablename
        where ctid not in (select min(t2.ctid)
                           from tablename t2
                           group by column1, column2, column3
                          );
    

    我不确定 Redshift 是否支持 ctid。但是话又说回来,尽管有标签,但您的问题显然是关于 Postgres 的。

    【讨论】:

    • 感谢回答:)!但执行sql,出现以下错误:[Amazon](500310) Invalid operation: column t2.ctid does not exist
    • redshift 基于 Postgre SQL 8.0.2
    • @hyeyoung 。 . .但是有很大的不同:docs.aws.amazon.com/redshift/latest/dg/….
    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多