如何在单个查询中组合2个或更多桥接表

时间:2009-12-19 16:11:32

标签: sql database-design query-optimization

我有以下表格:

表:人(身份,姓名,姓氏,年龄,年龄,电话等) 表:角色(id,名称)
表:技能(身份证,姓名)
表:People_Roles(id,personID ^,roleID ^)
表:People_Skills(id,personID ^,skillID ^)

^ = foreign key

我基本上想要一个查询,它为我提供了所有人及其角色和技能的完整结果集。

Person.First,Person.Last,Roles.Name,Skills.Name

2 个答案:

答案 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

此查询会选择所有人,即使是未分配RolesSkills的人。

答案 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)来确保每对只能进行一次。