2010-10-15 5 views
0

J'ai les 3 tableaux suivantsSQL Server - Query Aide

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 

Le tableau UsersTeams sert à tenir un registre de toutes les équipes un utilisateur est membre. Je veux trouver un moyen, avec un identifiant utilisateur, de lister toutes les équipes dont un utilisateur n'est pas membre.

Quelqu'un peut-il m'aider?

Cordialement

+0

Merci à tous pour votre aide. –

Répondre

2
DECLARE @UserID INT; 

SET @UserID = 1; 

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

Vous pouvez utiliser 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

* techniquement * plus sûr que l'approche NOT IN, puisque nous n'avons pas le DDL :) –

+0

Beaucoup plus lent que l'approche NOT IN puisque la sous-requête est corrélée. –

1

A se joindre à <> état pourrait mieux performer.

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