SQL 如何 select 来自 table 的所有行加入其他 table 即使没有关联的行

SQL how to select all rows from table joining other table even if there are no rows associated

我有 3 张桌子

Projects   Persons      PeopleInProjects
 - Id      - Id         - Id
 - Name    - Name       - PersonId
           - Role       - ProjectId

我如何 select 与人员角色为 'admin' 的项目关联的所有项目名称和人员?

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

我只需要 select 所有项目一次,而且我需要 select 个项目,即使他们没有与他们相关联的角色 '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 有管理员关联的项目,而不是所有项目

如果您想要所有项目 然后 任何可能碰巧被分配的管理员,请使用 left join:

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 ;