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

qv7cva1a  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(249)

我有三张table

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

如果persons角色为“admin”,我将如何选择与该项目相关联的所有项目名称和人员?
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'

仅选择与管理员关联的项目,而不是所有项目

laximzn5

laximzn51#

如果您希望所有的项目以及任何可能被分配的管理员,请使用 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 ;

相关问题