2016-04-09 15 views
0

Wir haben viele-zu-viele Beziehung und das sind die Details für die gleichen und seine nicht-hierarchischen Daten.SQL-Abfrage mit vielen zu vielen Beziehung

einen Benutzernamen Test 1 >> Mannschaft finden >> und die anderen Mitglieder des Teams

Table Team (Team Table) 
    Id Name 
    1 Ninja 
    2 Maverick 
    3 Transformer 

Table User (User Table) 
    Id Name Email 
    1 test1 [email protected] 
    2 test2 [email protected] 
    3 test3 [email protected] 

Table Team_USER_Map (User Map) 
    ID User_Id Team ID 
    1 1  1 
    2 1  2 
    3 2  3 
    4 2  1 
    5 3  1 
    6 3  2 
    7 3  3 

Problem Statement finden:

Je nach dem Benutzernamen, muss ich finden der Benutzer des anderen für dasselbe Team.

Also für user name = 'test1', muss ich das Team finden, dessen gehört und andere Benutzer des gleichen Teams gehören.

+2

Bitte fügen Sie die Abfrage, mit der Sie stecken bleiben –

Antwort

1

Try this:

DECLARE @Name as nvarchar (50)  
    SET @Name = 'test1' 

    SELECT u.Name as UserName, u.Email, t.Name as TeamName 
    FROM Team as t INNER JOIN Team_USER_Map as tum ON t.Id = tum.Team_ID 
    INNER JOIN User as u ON u.Id = tum.User_Id 
    WHERE u.Name LIKE @Name OR tum.Team_ID = 
    (
     SELECT t.Id 
     FROM Team as t INNER JOIN Team_USER_Map as tum ON t.Id = tum.Team_ID 
     INNER JOIN User as u ON u.Id = tum.User_Id 
     WHERE u.Name LIKE @Name 
    ) 

Ich denke, das ist das, was Sie erreichen wollen. Der erste Teil der WHERE -Klausel ist einfach, weil sie den Benutzer mit seinem Namen zurückgibt.

Im zweiten Teil müssen Sie SELECT WITHIN SELECT Anweisung verwenden, um alle Benutzer zu erhalten, die zum Team des Benutzers mit typisiertem Namen gehören.

Ich hoffe, es ist hilfreich und klar genug.

Viel Glück!

Verwandte Themen