当有多个匹配行时控制 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