我有以下表格:
表:人(身份,姓名,姓氏,年龄,年龄,电话等)
表:角色(id,名称)
表:技能(身份证,姓名)
表:People_Roles(id,personID ^,roleID ^)
表:People_Skills(id,personID ^,skillID ^)
^ = foreign key
我基本上想要一个查询,它为我提供了所有人及其角色和技能的完整结果集。
Person.First,Person.Last,Roles.Name,Skills.Name
答案 0 :(得分:3)
SELECT p.first, p.last, r.name, s.name
FROM People p
LEFT JOIN People_Roles pr
ON pr.personID = p.id
INNER JOIN Roles r
ON pr.roleID = r.id
LEFT JOIN People_Skills ps
ON ps.personID = p.id
INNER JOIN Skills s
ON ps.skillID = s.id
此查询会选择所有人,即使是未分配Roles
或Skills
的人。
答案 1 :(得分:0)
此查询将起作用:
SELECT Person.First, Person.Last, Roles.Name, Skills.Name
FROM People
LEFT JOIN People_Skills
ON People.id = People_Skills.personID
INNER JOIN Skills
ON People_Skills.skillID = Skills.id
LEFT JOIN People_Roles
ON People.id = People_Roles.personID
INNER JOIN Roles
ON People_Roles.roleID = Skills.id
顺便说一下,为什么你的“桥”表有自己的ID。我只想使用由PersonID组成的compound key和相应的外键(skillsID或rolesID)来确保每对只能进行一次。