2016-04-09 19 views
0

リレーションシップは多対多で、これらは同じデータとその非階層データの詳細です。ユーザー名テスト1の場合多対多リレーションシップを持つsqlクエリ

>>チームを見つける>>チーム

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 

問題文の他のメンバーを見つける:ユーザー名によっては

を、私が見つける必要があります同じチームの他のすべてのユーザー

したがって、ユーザー名= 'test1'の場合、そのチームが所属し、同じチームに属する他のユーザーを探す必要があります。

+2

あなたが付いているクエリを追加してください –

答えて

1

はこれを試してみてください:

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 
    ) 

私はそれはあなたが達成したいものだと思います。 WHERE節の最初の部分は、その名前のユーザーを返すので簡単です。

第2部では、SELECT WITHIN SELECTステートメントを使用して、入力された名前のユーザーのチームに属するすべてのユーザーを取得する必要があります。

私はそれが参考になり、十分明確であることを望みます。

幸運を祈る!

関連する問題