SQL/Presto:由于NULL,右联接比原始表大
我需要用3个条件右连接2个表,但结果表比左表或右表大 左表a如下所示:SQL/Presto:由于NULL,右联接比原始表大,sql,join,presto,outer-join,Sql,Join,Presto,Outer Join,我需要用3个条件右连接2个表,但结果表比左表或右表大 左表a如下所示: capacity value group_id level_id tags 100 3 a ab 120 5 a afb lala 122 4 b afg hhh 122 6 c adfg
capacity value group_id level_id tags
100 3 a ab
120 5 a afb lala
122 4 b afg hhh
122 6 c adfg
右表b如下所示:比左表大
user group_id level_id tags
adsf a ab
af a abf df
sf a afb lala
dsf b afg hhh
sdf c adfg
我想将值和容量值附加到右边的表b中。我使用了以下查询,但结果表比正确的表大。我注意到这是由于右表和左表中的标签都是空的,但是我想知道如何解决这个问题
select a.capacity, a.value, b.*
from a
right join b
on a.group_id = b._group_id
and a.level_id = b.level_id
and a.tags = b.tags
我注意到这是由于右表和左表中的标签都是空的
不,这不是重复的原因。事实上,NULL
值无法进行比较,因此如果其中一个值为NULL
,则根本无法获得匹配。也就是说,b
中的行将返回a
列的NULL
值
如果希望NULL
值匹配为相等,则需要一个NULL
安全比较——并且Presto支持SQL标准与没有区别。我也非常喜欢左连接
而不是右连接
:
select a.capacity, a.value, b.*
from b left join
a
on a.group_id = b._group_id and
a.level_id = b.level_id and
a.tags is not distinct from b.tags;
如果您得到的是重复项,那是因为a
中有重复项。您可以使用以下方法检查此问题:
select group_id, level_id, tags, count(*)
from a
group by group_id, level_id, tags
having count(*) >= 2;
如果您添加预期结果并设置dbfiddle,将更容易提供帮助!