布尔值-表中是否存在ID?

时间:2018-07-12 15:42:25

标签: sql sql-server

我有两个表...一个主ID表和一个结果ID表,其中的主表中只有几个ID。我正在寻找创建以下SQL查询:

Select
   A.ID
   (Case when B.ID is in A.ID 1 Else 0 End) as is_found
From
   master_table as A
   LEFT JOIN results_table as B
   ON A.ID = B.ID

结果表应该具有主表中的所有ID,并带有一个布尔列,说明是否在结果表中找到了该ID。谢谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我会使用case . . . exists

Select mt.id,
       (case when exists (select 1 from results_table rt where rt.id = mt.id) then 1 else 0 end) as is_found
From master_table ;

答案 1 :(得分:1)

首先,考虑results_table具有零个或一个匹配行的情况;在这种情况下,LEFT JOIN将始终为每个ID提供一行,如果B.ID中没有相应的行,则NULL将为results_table

因此,我们可以使用简单的CASE进行测试:

Select
   A.ID,
   CASE WHEN B.ID IS NOT NULL THEN 1 ELSE 0 END as is_found
From
   master_table as A
   LEFT JOIN results_table as B
   ON A.ID = B.ID

如果在results_table中对于相同的ID可能有多个行,则LEFT JOIN可以依次创建几行,每个匹配项一行。

CASE语句的结果对于A.ID的所有值都是相同的-如果匹配项为零,则值0会出现一次,如果匹配项为{1}或更多,它将始终具有值1。因此,我们可以简单地获取整个查询的不同值:

Select Distinct
   A.ID,
   CASE WHEN B.ID IS NOT NULL THEN 1 ELSE 0 END as is_found
From
   master_table as A
   LEFT JOIN results_table as B
   ON A.ID = B.ID