2009-10-22 52 views
0

用戶ID的獨特的名單(不討論表的設計,其木已成舟!)SQL返回基於2臺

我知道如何使用要做到這一點查詢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

300問題,33%接受評級... – 2009-10-22 03:19:41

回答

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

您也可以使用EXCEPT關鍵字做這種方式:

SELECT UserID FROM Users 
EXCEPT 
SELECT UserID FROM OldUsers 

至於性能:你只需要運行三個腳本(自己與NOT IN,kragan的做法與LEFT JOIN和這一個與EXCEPT)在比較和衡量自己的速度是什麼,他們使用多少資源等。 - >看執行計劃,檢查IO統計 - 通常的東西...

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已建議。