我有一些记录集,但是现在我必须只选择这个集合中那些在两个表中都有Id的记录。
假设我有包含
的table1Id Name
----------
1 Name1
2 Name2
现在我只需要从表一中选择那些记录 在table2或table3中有id的
我试图在内部联接中应用或操作,如:
select *
from table1
inner join table2 on table2.id = table1.id or
inner join table3 on table3.id = table1.id.
有可能吗?解决这个问题的最佳方法是什么?实际上我也无法使用
if exist(select 1 from table2 where id=table1.id) then select from table1
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
使用left join
,然后检查至少有一个联接是否找到了关系
select t1.*
from table1 t1
left join table2 t2 on t2.id = t1.id
left join table3 t3 on t3.id = t1.id
where t2.id is not null
or t3.is is not null
答案 1 :(得分:1)
我认为最有效的方法是在table2和table3上使用UNION
并加入它:
SELECT t1.*
FROM table1 t1
INNER JOIN(SELECT id FROM Table2
UNION
SELECT id FROM Table3) s
ON(t.id = s.id)
答案 2 :(得分:1)
我倾向于使用exists
:
select t1.*
from table1 t1
where exists (select 1 from table2 t2 where t2.id = t1.id) or
exists (select 1 from table3 t3 where t3.id = t1.id) ;
在联接中使用exists
(或in
)的优势涉及重复的行。如果table2
或table3
包含给定id
的多行,则使用join
的版本将在结果集中生成多行。
答案 3 :(得分:1)
或者,您也可以使用以下SQL:
cl