2010-11-15 29 views

回答

0
SELECT DISTINCT Id FROM A WHERE Id NOT IN (SELECT ID FROM B); 
14
select distinct id 
from TableA a 
where not exists (
    select id 
    from TableB 
    where id = a.id 
) 
0
SELECT DISTINCT Id FROM A WHERE Id NOT IN(SELECT DISTINCT Id FROM B); 
3

只是提供不同的解決方案比NOT IN:

SELECT DISTINCT A.Id 
FROM A 
LEFT OUTER JOIN B 
    ON A.Id = B.Id 
WHERE B.Id IS NULL 

「好」 的解決方案通常爲負或EXCEPT,但MySQL不支持它。

這個問題被問及前幾次,有人發表文章比較不在,不存在和左外部聯接...是空的。如果有人再次找到它會很有趣!

1

我會使用一個NOT EXISTS像這樣:

SELECT A.Id 
FROM TableA A 
WHERE NOT EXISTS (SELECT B.Id FROM TableB B WHERE A.Id = B.Id) 
GROUP BY A.Id 
0

子查詢會得到B.該group by...having所有的ID將獲得一個所有的唯一ID也不會B.

select * 
from A 
where id not in 
(
    select distinct id 
    from B 
) 
group by ID 
having count(*) > 1; 
3

最有效的答案是使用左連接,因爲使用「NOT IN」有時會阻止查詢使用索引(如果存在)。

在這種情況下,答案會是這樣的

SELECT DISTINCT 
    * 
FROM 
    TableA a 
LEFT JOIN 
    TableB b 
ON 
    a.Id = b.Id 
WHERE 
    b.Id IS NULL 

或者,這是更具可讀性比左連接,而且比NOT IN的解決方案更有效

SELECT * FROM TableA a where NOT EXISTS (SELECT * FROM TableB where Id = a.Id) 
相關問題