web-dev-qa-db-fra.com

Comment sélectionner les résultats SQL sur la base de plusieurs tables

J'ai besoin de 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. Je n'ai utilisé que des jointures internes, et il ne semble pas que je puisse les utiliser ici, donc une idée de comment faire?

25
cfrederich

Cela vous donnera le coach:

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 simplement tout mélanger avec UNION.

33
Chris Cunningham

Utilisez simplement un OR 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 préférez si et votre base de données a COALESCE

   LEFT JOIN team t
        ON COALESCE(pl.team_id,c.team_id)  = t.id
3
Conrad Frix