当有多个匹配行时控制 SQL 连接条件
Control on SQL join condition when there are more than one matching row
我有一个包含多个匹配行的联接。我怎样才能更好地控制连接?特别是,如示例所示,当有多个匹配行时,我不想获取任何结果并保持我的输入。
在图片中,我展示了我想要的结果。绿色的那一行因为直接匹配正确得到,红色的那一行也没有正确得到,因为匹配不止一个
Select t2.id, t1.Insurance_num, t1Name, t1.Surname
From Table_1 t1
left join Table_2 t2
on t1.Insurance_num=t2.Insurance_num
我正在使用 Hive,但我想这个问题的答案应该是通用的。
你可以试试这个...我不确定它是否正是你需要的。
如果没有匹配 Insurance_Num 与 left-join 的合并为空,则返回 0, 或 , 是 匹配了insurance_num,但是计数比1差other,就得到了CASE查询的ELSE条件。
只有 在 pre-query 中匹配, 和 才有一条记录 insurance_num 它是否从 pre-aggregation 查询中获取 ID。
select
case when coalesce( PreSum.NumEntries, 0 ) = 1
then cast( PreSum.LowID as varchar )
else 'N.D' end as IDorNot,
t1.Insurance_num,
t1.Name,
t1.Surname
from
table_1 t1
LEFT JOIN
( select
t2.Insurance_Num,
min( t2.id ) as LowID,
count(*) as NumEntries
from
Table_2 t2
group by
t2.Insurance_Num ) PreSum
on t1.insurance_Num = PreSum.Insurance_Num
我有一个包含多个匹配行的联接。我怎样才能更好地控制连接?特别是,如示例所示,当有多个匹配行时,我不想获取任何结果并保持我的输入。
在图片中,我展示了我想要的结果。绿色的那一行因为直接匹配正确得到,红色的那一行也没有正确得到,因为匹配不止一个
Select t2.id, t1.Insurance_num, t1Name, t1.Surname
From Table_1 t1
left join Table_2 t2
on t1.Insurance_num=t2.Insurance_num
我正在使用 Hive,但我想这个问题的答案应该是通用的。
你可以试试这个...我不确定它是否正是你需要的。
如果没有匹配 Insurance_Num 与 left-join 的合并为空,则返回 0, 或 , 是 匹配了insurance_num,但是计数比1差other,就得到了CASE查询的ELSE条件。
只有 在 pre-query 中匹配, 和 才有一条记录 insurance_num 它是否从 pre-aggregation 查询中获取 ID。
select
case when coalesce( PreSum.NumEntries, 0 ) = 1
then cast( PreSum.LowID as varchar )
else 'N.D' end as IDorNot,
t1.Insurance_num,
t1.Name,
t1.Surname
from
table_1 t1
LEFT JOIN
( select
t2.Insurance_Num,
min( t2.id ) as LowID,
count(*) as NumEntries
from
Table_2 t2
group by
t2.Insurance_Num ) PreSum
on t1.insurance_Num = PreSum.Insurance_Num