2010-10-15 82 views
0

我有以下3個表SQL服務器 - 查詢幫助

Teams (TeamID int, TeamName varchar(200)) - TeamID is identity col 
Users (UserID int, Username varchar(200)) - UserID is identity col 
UsersTeams (ID int, UserID int, TeamID int) - Table has FK references to the 2 tables above 

表UsersTeams用來保持記錄所有團隊的用戶中的一員。 我想找到一種方法,給出一個用戶ID,列出用戶不是其成員的所有團隊。

任何人都可以幫忙嗎?

問候

+0

感謝大家的幫助。 – 2010-10-16 22:57:52

回答

2
DECLARE @UserID INT; 

SET @UserID = 1; 

SELECT 
    * 
FROM Teams 
WHERE TeamID NOT IN (SELECT TeamID FROM UserTeams WHERE UserID = @UserID) 
3

你可以使用not exists

select * 
from teams t 
where not exists 
     (
     select * 
     from UserTeams ut 
     join User u 
     on  u.UserId = ut.UserId 
     where t.TeamId = ut.TeamID 
       and Users.Username = 'TheUser' 
     ) 
+0

*技術上*比NOT IN方法更安全,因爲我們沒有DDL :) – 2010-10-15 22:02:07

+0

由於子查詢相關,比NOT IN方法慢很多。 – 2010-10-15 22:09:02

1

A和<>條件加入可能有更好的表現。

DECLARE @UserID INT 
SET @UserID = 1 

SELECT Teams.TeamID, Teams.TeamName FROM Teams 
INNER JOIN UsersTeams 
ON Teams.TeamID <> UsersTeams.TeamID 
WHERE UsersTeams.UserID = @UserID