Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL/Presto:由于NULL,右联接比原始表大_Sql_Join_Presto_Outer Join - Fatal编程技术网

SQL/Presto:由于NULL,右联接比原始表大

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

我需要用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      
右表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,将更容易提供帮助!