2010-10-15 83 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