table A table B
---------- ---------
id name a_id
1 Chris 1
2 Steve
3 Allen
什么是正确的SQL查询中选择所有的行A中的id不表B中发生SQL选择行已在表B中没有任何行
Returns: 2 Steve, 3 Allen
table A table B
---------- ---------
id name a_id
1 Chris 1
2 Steve
3 Allen
什么是正确的SQL查询中选择所有的行A中的id不表B中发生SQL选择行已在表B中没有任何行
Returns: 2 Steve, 3 Allen
有正确的方法,并有易于理解的方式。任何半路出家的SQL引擎就会把他们都到在后端同样的事情,所以我总是写一个简单的方法:
select * from A where id not in (select a_id from B)
select
A.id,
A.Name
from A
left join B on A.id = B.A_id
where
B.A_id is null
试试这个:
SELECT A.*
FROM A
LEFT JOIN B ON B.A_id = A.id
WHERE B.a_id IS NULL
SELECT *
FROM TableA
WHERE id IN (
SELECT id
FROM TableA
EXCEPT
SELECT a_id
FROM TableB
)
而且有很多方法导致罗马或StackOverflow,这里有一个替代方案:
SELECT * FROM [A] AS [tblA]
WHERE NOT EXISTS (SELECT * FROM [B] AS [tblB] WHERE [tblB].[A_id] = [tblA].[id])
当您管理联合数据库时,此原则不适用。 – 2011-04-02 09:31:55
@Johann Blais你是什么意思? – rvk 2011-04-02 10:05:05
由于您只有一个数据库,因此它是无关紧要的。在联邦数据库中,两个表格可能来自不同的子数据库,从而带来一组新的优化问题。 – 2011-04-03 08:29:39