我有两个表TabA,TabB 我有兴趣将它们连接在一起,以便结果与TabA具有相同数量的记录,并且它仅从TabB加入非NULL值。那就是说
TabA
field1 field2
1 valone
1 valtwo
2 valone
3 valone
TabB
field3 field4, field5
1 NULL test3
1 test1 NULL
2 test2 NULL
我想要的结果是:
field1 field2 field4 field5
1 valone test1 test3
1 valtwo test1 test3
2 valone test2 NULL
3 valone NULL NULL
到目前为止我已经
了SELECT TabA.field1, TabA.field2, TabA.field4
FROM TabA
LEFT JOIN TabB ON TabA.field1 = TabB.field3
但是,这并没有考虑到我想要返回与TabA中相同数量的行的事实。
答案 0 :(得分:1)
您的问题有两种常见方法。一种是使用多个outer joins
:
select a.field1, a.field2, b.field4, b2.field5
from TabA a
left join TabB b on a.field1 = b.field3 and b.field4 is not null
left join TabB b2 on a.field1 = b2.field3 and b2.field5 is not null
如果TabB
有多条记录field4
或field5
不是每field3
为空,则可能会返回多个结果。
要消除重复,另一个选择是使用conditional aggregation
。
select a.field1, a.field2,
max(case when b.field4 is not null then b.field4 end) field4,
max(case when b.field5 is not null then b.field5 end) field5
from TabA a
left join TabB b on a.field1 = b.field3
group by a.field1, a.field2
如果存在多条记录,则只会在TabA
中为每条记录返回一行,但field4
和/或field5
可能不是您想要的。取决于您当时的预期结果。
如果重复不是问题,那么两种解决方案都应该产生您想要的结果。