sql根据2个表返回UserID的唯一列表

时间:2009-10-22 02:59:43

标签: sql join

(不讨论桌面设计,这是一个完成的交易!)

我知道如何使用WHERE NOT IN子句来执行此查询,但我想知道如何使用连接完成此操作。

注意:行不是唯一的,因此我们必须执行DISTINCT以避免重复。

Users (userID)
OldUsers(UserID)

因此,我可以使用WHERE NOT IN子句:

SELECT DISTINCT(u.userID)
FROM Users u
WHERE u.userID NOT IN (SELECT o.userID FROM OldUsers o)

效果也是关键所在。

3 个答案:

答案 0 :(得分:3)

select distinct u.userID from Users u
left join OldUsers o on o.userId = u.userID
where o.userId is null

答案 1 :(得分:1)

您也可以使用EXCEPT关键字来执行此操作:

SELECT UserID FROM Users
EXCEPT
SELECT UserID FROM OldUsers

至于效果:您只需要运行三个脚本(您自己使用NOT IN,kragan的方法使用LEFT JOIN,此处使用EXCEPT)进行比较和衡量你自己的速度是什么,他们使用了多少资源等等。>看看执行计划,查看IO统计数据 - 通常的东西......

答案 2 :(得分:0)

您还可以使用相关子查询和EXISTS

SELECT DISTINCT(u.userID)
FROM Users u
WHERE NOT EXISTS (
     SELECT o.userID 
     FROM OldUsers o 
     WHERE o.UserID = u.userID)

如果这实际上更快取决于表的大小,那么它是另一个版本,可以像marc_s建议的那样试用。