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 ;
我有 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 ;