2010-11-15 28 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) 
相关问题