运行排除重复行的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

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

示例:

潜在客户表

id|uid|rid
1|aaa|111
2|aaa|123
3|bbb|312

销售表

id | rid
1 | 111
2 | 123
3 | 312

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

您可以使用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

我想你想要这样的东西:

select db1.id
from (select db1.*, count(*) over (partition by db1.uid) as cnt
from db1
) db1 left join
db2
on db2.rid = db1.rid
where cnt = 1 or cb2.rid is not null;

您可以使用不同的

SELECT
distinct db1.id AS id
FROM db1
LEFT JOIN db2 ON
db1.rid = db2.rid

最新更新