SQL/Presto:由于 NULL,右连接比原来的 table 大

SQL/Presto: right join bigger than original table due to NULL

我需要在 3 个条件下右连接 2 table,但结果 table 大于左或右 table。

left_table 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      

right table b 像下面这样:比左边大 table

 user      group_id    level_id    tags 
 adsf      a           ab          
 af        a           abf         df
 sf        a           afb         lala
 dsf       b           afg         hhh
 sdf       c           adfg        

我想在右边追加值和容量值table b.我使用了以下查询,但结果 table 比右边的 table 大。我注意到这是由于左右 table 标签中的 NULL 造成的,但我想知道如何解决这个问题。

  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

I noticed that it is due to the NULL in tags in both the right and left tables

不,这不是重复的原因。事实上,NULL 无法通过 比较,因此如果任一值为 NULL,您将根本无法匹配。也就是说,b 中的行将返回 a.

中列的 NULL

如果您希望 NULL 值匹配为相等,那么您需要一个 NULL 安全比较——并且 Presto 支持 SQL 标准 is not distinct from。我也非常喜欢 left join 而不是 right join:

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;