MySQL外连接三个表

时间:2014-02-02 00:56:11

标签: mysql join multiple-tables

我在连接三个表时遇到问题。我有这些表:

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



谢谢大家的时间

1 个答案:

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