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;
我需要在 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;