我在连接三个表时遇到问题。我有这些表:
table teams:
id_team | team_name
--------+-----------
1 | Alpha
2 | Beta
3 | Charlie
--------+----------
table persons
id_person | name
----------+-------
1 | Homer
2 | Ned
3 | Moe
----------+--------
table teams_has_persons
id_team | id_person | is_leader
--------+-----------+-----------
1 | 1 | 0
1 | 2 | 1
2 | 3 | 0
--------+-----------+-----------
团队可能包含也可能不包含人员。 团队可能有也可能没有领导者,尽管有人。 一个团队只能有一个领导者。
我想列出所有团队的领导者。 如果团队没有领导者,则应显示null(或其他任何内容)而不是领导者的姓名。 如果team_has_persons表中没有团队,那应该是 显示为没有领导者的团队。
期望的输出:
id_team | team_name | leader
--------+-----------+-----------
1 | alpha | Ned
2 | beta | <null>
3 | charlie | <null>
--------+-----------+-----------
我设法构建了这个查询:
SELECT
a.id_team,
a.team_name,
b.id_person,
b.is_leader,
c.name
FROM
teams as a
LEFT OUTER JOIN (teams_has_persons as b INNER JOIN persons as c ON b.id_person = c.id_person ) ON (a.id_team = b.id_team)
显示团队列表及其关联人员,但不是我想要的。
http://sqlfiddle.com/#!2/046668/1/0
谢谢大家的时间
答案 0 :(得分:0)
我无法发表评论...... 你需要这样的东西吗? http://sqlfiddle.com/#!2/046668/9
SELECT
a.id_team,
a.team_name,
b.id_person,
b.is_leader,
c.name
FROM
teams as a
LEFT OUTER JOIN (teams_has_persons as b
INNER JOIN persons as c ON b.id_person = c.id_person )
ON (a.id_team = b.id_team AND b.is_leader = 1)