首页 > 解决方案 > 使用两个不同键的条件 JOIN

问题描述

我有一个生成两个单独 ID 的查询:

SELECT
date, 
user_id,
vendor_id,
SUM(purchase) user_purchase
SUM(spend) vendor_spend
GROUP BY 1,2,3
FROM tabla.abc

这会产生如下结果:

date   user_id   vendor_id   user_purchase   vendor_spend
1/1/18   123      NULL         5.00             0.00   
1/1/18   NULL     456          0.00             10.00  

我想把它加入一个看起来像这样的桌子上:

client_id   user_id   vendor_id
456789      123       NULL
101112      NULL      456

但问题是,我显然想在两个适当的 ID 上加入它,所以我的最终输出看起来像这样:

date    client_id  user_id   vendor_id   user_purchase   vendor_spend
1/1/18   456790     123      NULL         5.00             0.00   
1/1/18   101112     NULL     456          0.00             10.00

那么有没有一种我可以做的方法,一个有条件的加入?诸如此类的东西WHERE user_id IS NULL THEN......

标签: postgresqlamazon-redshift

解决方案


使用not distinct from,因为其中一个参数可能为空:

select *
from (
    select
        date, 
        user_id,
        vendor_id,
        sum(purchase) user_purchase,
        sum(spend) vendor_spend
    from table1
    group by 1,2,3
    ) t1
join table2 t2 
    on (t1.user_id, t1.vendor_id) 
    is not distinct from (t2.user_id, t2.vendor_id)

请注意,出于性能原因,您应该加入已经聚合的表(因此我将原始查询放在派生表中)。


推荐阅读