选择另一个表中不存在的所有元素

时间:2013-10-23 19:27:33

标签: sql sql-server

我有两个表,一个包含所有当前用户的USER表。下一个表称为任务并且有很多信息,其中一列是PointPerson,它与用户表中的一列相同。此列包含不再是用户的人员的条目。这是我想从SELECT语句中获取的内容。我希望任务表中的所有用户都不在用户表中。

这是我尝试的但我没有得到任何无法纠正的回复:

SELECT DISTINCT TSK.PointPerson FROM [Task] AS TSK
WHERE NOT EXISTS (
SELECT DisplayName FROM [User]
)

我做错了什么以及如何获得理想的结果?

3 个答案:

答案 0 :(得分:7)

试试这个:

SELECT DISTINCT TSK.PointPerson FROM [Task] AS TSK
WHERE TSK.PointPerson NOT IN (
SELECT DisplayName FROM [User]
)

或者采用不同的方法:

SELECT DISTINCT TSK.PointPerson FROM [Task] AS TSK
LEFT JOIN [User] AS U ON U.DisplayName = TSK.PointPerson 
WHERE U.DisplayName IS NULL

答案 1 :(得分:2)

您可以尝试这样: -

SELECT DISTINCT TSK.PointPerson
FROM [Task]
WHERE NOT EXISTS 
    (SELECT DisplayName  
     FROM User
     WHERE Task.name = User.name)

或使用这样的LEFT JOIN: -

SELECT DISTINCT TSK.PointPerson
FROM Task t1
LEFT JOIN User t2 ON t2.name = t1.name
WHERE t2.name IS NULL

答案 2 :(得分:1)

另一种方法

SELECT PointPerson 
FROM [Task]
EXCEPT
SELECT DisplayName 
FROM [User]