在T1中,我有50个ID。我正在尝试查找T2中的哪些。并在ID旁边添加行名称“ test”,以及有关T2中发生的信息。但是,当我输入代码时,我只会收到T2中包含的ID。我做错了什么?
SELECT DISTINCT t1.id, CASE WHEN t1.id IS NULL THEN 0 ELSE 1 END AS test
FROM t2
JOIN t1 ON t2.id = t1.id
答案 0 :(得分:1)
您可以使用外部联接:
SELECT DISTINCT t1.id, CASE WHEN t2.id IS NULL THEN 0 ELSE 1 END AS test
FROM t1 LEFT JOIN t2 ON t2.id = t1.id
答案 1 :(得分:0)
使用exists
:
select t1.*,
(case when exists (select 1 from t2 where t2.id = t1.id) then 1 else 0 end) as flag
from t1;
请注意,不需要select distinct
。如果不需要,该构造只会减慢查询速度。
答案 2 :(得分:0)
使用“左连接”也可以获取不匹配的行。
select t1.id
, case when t2.id is null then 0 else 1 end as test
from t1
left outer join t2
on t1.id = t2.id