sql查询有多对多的关系

时间:2016-04-09 13:55:29

标签: sql

我们有多对多的关系,这些是相同及其非分层数据的详细信息。

对于用户名测试1>>找到团队>>并找到团队中的其他成员

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

 Table User (User Table)
    Id Name Email
    1  test1 test1@test.com
    2  test2 test2@test.com
    3  test3 test3@test.com

 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',我需要找到其所属的团队以及属于同一团队的其他用户。

1 个答案:

答案 0 :(得分: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子句的第一部分很简单,因为它会返回用户的名字。

在第二部分中,您必须使用 SELECT WITHIN SELECT 语句来获取属于类型名称用户的团队的所有用户。

我希望它有用且清晰。

祝你好运!