我的表格包含以下字段:Id, Name, Dept
示例数据:
ID Name Dept
1 John A
2 Mary A
3 Tom A
4 David A
5 Mary B
6 David B
我正在尝试获取部门'A'
但不在部门'B'
我能够提出一个可以得到预期结果的查询:
select Id, Name, Dept
from test
Where Dept= 'a' and name not in (
select name from test where Dept= 'b')
但是我怎么能用连接做同样的事呢?
答案 0 :(得分:4)
您可以使用LEFT JOIN
:
SELECT t1.*
FROM test t1
LEFT JOIN test t2
ON t1.Name = t2.Name
AND t2.Dept = 'B'
WHERE
t1.Dept = 'A'
AND t2.ID IS NULL
但我更喜欢NOT EXISTS
方法:
SELECT *
FROM test t
WHERE
t.Dept = 'A'
AND NOT EXISTS(SELECT 1 FROM test WHERE Name = t.Name AND Dept = 'B')
Aaron Bertrand撰写了一篇文章,比较了检查行是否存在的不同技术,NOT EXISTS
通常是最佳选择。
答案 1 :(得分:1)
怎么样:
SELECT A.Id, A.Name, A.Dept
FROM test A, test B
WHERE A.Dept= 'a'
AND B.Dept = 'b'
AND A.Name <> B.Name