我想要做的是如果两个不同的表中存在ID,则将数据拉回来,例如:
select details from myTable
where myTable.id in (select id from tbl1) or myTable.id in (select id from tbl2)
到目前为止,我没有运气。我这样做了吗?如果没有,你们能提出一些方法来获得理想的结果吗?
我遇到的问题是查询挂起,我不确定这是由于格式错误的查询还是其他一些我没想到的原因。
答案 0 :(得分:2)
尝试使用UNION:
SELECT details
FROM dbo.myTable
WHERE
myTable.id IN (SELECT id FROM dbo.tbl1
UNION
SELECT id FROM dbo.tbl2)
答案 1 :(得分:1)
如果要检查两个表中是否存在,可以执行以下操作:
SELECT details
FROM dbo.myTable A
WHERE EXISTS ( SELECT 1
FROM dbo.tbl1 B
INNER JOIN dbo.tbl2 C
ON B.ID = C.ID
WHERE A.ID = B.ID)
答案 2 :(得分:1)
如果id存在于tbl1或tbl2的 中,这将从myTable返回数据:
SELECT details
from myTable mt
where exists (select id from tbl1 where id = mt.id)
or exists (select id from tbl2 where id = mt.id)
对于大型表,这将比基于联合的查询(假设合适的索引)执行得更好,因为您只是检查是否存在,而不是从其他表中检索数据。
答案 3 :(得分:0)
以下是仅使用连接而不使用子查询的方法:
SELECT details FROM myTable
LEFT JOIN tbl1 ON tbl1.id = myTable.id
LEFT JOIN tbl2 ON tbl2.id = myTable.id
WHERE tbl1.id IS NOT NULL OR tbl2.id IS NOT NULL
如果这仍然挂起或需要很长时间,则可能是其中一个id
列上没有索引。但是,id
通常是自动编入索引的主键,因此不太可能。
我应该补充一点,如果这些id
列中的任何一列可以重复,即tbl1
中的多个行具有相同的id
,那么这将导致details
的重复副本{1}}。同样,我假设所有id
列都是主键,因此这不是一个问题。