从另一个表中的一个表中搜索记录,并接收有关此表的信息

时间:2018-07-17 11:31:52

标签: sql oracle plsql

在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

3 个答案:

答案 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