2014-02-02 2 views
1

У меня возникли проблемы с объединением трех таблиц. У меня есть эти таблицы:MySQL внешний соединяет три таблицы

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 
--------+-----------+----------- 

Команда может содержать или не содержать лиц. Команда может иметь или не иметь лидера, хотя у нее есть люди. У команды может быть только один лидер.

Я хочу перечислить все команды с их лидерами. Если у команды нет лидера, вместо имени лидера должно отображаться нуль (или что-то еще). Если команда отсутствует в таблице teams_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

Я не могу комментировать ... вам нужно что-то вроде этого? 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) 
Смежные вопросы