我有两个表...一个主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。谢谢您的帮助!
答案 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