首页 > 解决方案 > 运行排除重复行的 JOIN 语句

问题描述

我有一个包含重复条目的表(它们具有相同的 uid)。

我想通过使用 GROUP BY 子句从查询结果中删除重复项(其中一个条目是有效的,但它是随机的。我只能通过 rid 将它与 db2 连接来找出值是什么。我使用的是聚合函数(MAX 或 MIN)来保留一行,但我遇到的问题是我无法选择我需要的行。这导致从我的查询中获得的行数减少。

SELECT
MAX(db1.id) AS id,
FROM db1
LEFT JOIN db2 ON
db1.rid = db2.rid
GROUP BY r.uid

我能做些什么来解决这个问题吗?我在 Amazon Redshift 上运行查询。

例子:

潜在客户表

编号 | uid | 摆脱
1 | 啊!111
2 | 啊!123
3 | bbb | 312

销售表

编号 | 摆脱
1 | 111
2 | 123
3 | 312

因为 uid 相同,leads 表有一个重复的条目(ID 1 和 2)。我必须删除其中一个重复项,但这必须是 ID 2,因为可以在销售表中找到 ID 1(由 rid 链接)。

标签: sqljoinduplicatesamazon-redshift

解决方案


您可以使用 row_number() 函数

with cte as
    (
    SELECT *, row_number() over(partition by r.uid order by db1.id desc) as rn
    FROM db1
    LEFT JOIN db2 ON
    db1.rid = db2.rid
    )
delete from cte where rn<>1

推荐阅读