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?
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
.
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