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 . . . 我懂了。这是一种复杂的情况。带括号的版本应满足您的要求。请提供示例数据和所需结果。