Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何从连接其他表的表中选择所有行,即使没有关联的行_Sql_Many To Many - Fatal编程技术网

SQL如何从连接其他表的表中选择所有行,即使没有关联的行

SQL如何从连接其他表的表中选择所有行,即使没有关联的行,sql,many-to-many,Sql,Many To Many,我有三张桌子 Projects Persons PeopleInProjects - Id - Id - Id - Name - Name - PersonId - Role - ProjectId 如果人员角色为“管理员”,我将如何选择与该项目关联的所有项目名称和人员 PeopleInProjects只是一个多对多关系表,其中包含与项目关联的所有人员的ID。 项目可以有许多人或没有人与之关联 Se

我有三张桌子

Projects   Persons      PeopleInProjects
 - Id      - Id         - Id
 - Name    - Name       - PersonId
           - Role       - ProjectId
如果人员角色为“管理员”,我将如何选择与该项目关联的所有项目名称和人员

PeopleInProjects只是一个多对多关系表,其中包含与项目关联的所有人员的ID。 项目可以有许多人或没有人与之关联

Select pr.Name, p.Name 
from Projects as pr 
join PeopleInProjects as pp on pr.Id = pp.ProjectId
join Persons as p on pp.PersonId = p.Id
Where p.Role = 'admin'
我只需要选择一次所有项目,并且我需要选择项目,即使它们没有与角色“admin”相关联的人员

Select pr.Name, p.Name 
from Projects as pr 
join PeopleInProjects as pp on pr.Id = pp.ProjectId
join Persons as p on pp.PersonId = p.Id
Where p.Role = 'admin'
仅选择与管理员关联的项目,而不是所有项目

如果希望所有项目,然后是可能分配的任何管理员,请使用
左连接

Select pr.Name, p.Name 
from Projects pr left join
     (PeopleInProjects pp join
      Persons p
      on pp.PersonId = p.Id and p.Role = 'admin' 
     )
     on pr.Id = pp.ProjectId ;

这将选择与项目相关的所有人员,而不仅仅是那些以“管理员”为角色的人员,从而选择多个项目times@Martynas . . . 我懂了。这是一种复杂的情况。带括号的版本应满足您的要求。请提供示例数据和所需结果。