Как выбрать результаты SQL на основе нескольких таблиц - PullRequest
25 голосов
/ 05 июля 2011

Мне нужно выбрать результаты из одной таблицы на основе определенных совпадающих значений в нескольких других таблицах. У меня есть следующие таблицы:

person: id, firstname, lastname
team: id, teamname
player: id, person_id(FK), team_id(FK)
coach: id, person_id(FK), team_id(FK)

Мне нужно вернуть имена всех тренеров и игроков для каждой команды. Я когда-либо использовал только внутренние соединения, и не похоже, что я могу использовать их здесь, так что есть идеи, как это сделать?

Ответы [ 2 ]

33 голосов
/ 05 июля 2011

Это даст вам тренер:

SELECT team.Teamname, person.Firstname, person.Lastname
FROM person
JOIN coach ON person.id = coach.person_id
JOIN team  ON coach.team_id = team.id

И это даст вам игроков:

SELECT team.Teamname, person.Firstname, person.Lastname
FROM person
JOIN player ON person.id = player.person_id
JOIN team  ON player.team_id = team.id

Итак, не элегантный, простой ответ - просто бросить все это вместе с UNION.

3 голосов
/ 05 июля 2011

Просто используйте ИЛИ в команде

SELECT
     P.firstname,
     P.lastname,
     T.teamname
FROM
    person p id
    LEFT JOIN player pl
    ON p.id = pl.person_id
    LEFT JOIN coach c
    ON p.id = c.person_id
    LEFT JOIN team t
    ON pl.team_id = t.id
         or.c.team_id = t.id

Или, если вы предпочитаете, если и ваша база данных имеет COALESCE

   LEFT JOIN team t
        ON COALESCE(pl.team_id,c.team_id)  = t.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...