(不讨论桌面设计,这是一个完成的交易!)
我知道如何使用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)
效果也是关键所在。
答案 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建议的那样试用。