Comment sélectionner des résultats SQL basés sur plusieurs tables

Je dois sélectionner les résultats d'une table en fonction de certaines valeurs correspondantes dans quelques autres tables. J'ai les tableaux suivants:

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

Je dois retourner tous les noms des entraîneurs et des joueurs pour chaque équipe. J'ai seulement utilisé des jointures intérieures, et il ne semble pas que je puisse les utiliser ici, donc une idée de comment faire cela?

24
demandé sur Chandu 2011-07-05 22:59:22

2 réponses

Cela vous donnera l'entraîneur:

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

Et cela vous donnera les joueurs:

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

Donc, la réponse simple et non élégante est de tout mélanger avec UNION.

31
répondu Chris Cunningham 2015-01-20 15:15:10

Il suffit D'utiliser un ou dans la jointure à L'équipe

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

Ou si vous perfer si et votre base de données a COALESCE

   LEFT JOIN team t
        ON COALESCE(pl.team_id,c.team_id)  = t.id
3
répondu Conrad Frix 2011-07-05 19:21:39