J'ai 3 tables:
Personnes (PersonID, Nom, SS) Peurs (PearID, Peur) Person_Fear (ID, PersonID, FearID)
Maintenant, j'aimerais lister chaque personne ayant la peur qui lui est liée (il peut y avoir plusieurs peurs mais peut aussi n'en avoir aucune). La table des personnes doit être montrée même si une personne n'a pas de peur liée à elle.
Je pense que j'ai besoin de faire un LEFT JOIN, mais mon code ne semble pas fonctionner:
SELECT persons.name,
persons.ss,
fears.fear
FROM persons
LEFT JOIN fears
ON person_fear.personid = person_fear.fearid
Qu'est-ce que je fais mal ici?
Vous essayez de joindre Person_Fear.PersonID
à Person_Fear.FearID
- Cela n’a pas vraiment de sens. Vous voulez probablement quelque chose comme:
SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear
INNER JOIN Fears
ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID
Ceci joint Persons
à Fears
via la table intermédiaire Person_Fear
. Comme la jointure entre Persons
et Person_Fear
est un LEFT JOIN
, vous obtiendrez tous les enregistrements Persons
.
Alternativement:
SELECT Persons.Name, Persons.SS, Fears.Fear FROM Persons
LEFT JOIN Person_Fear ON Person_Fear.PersonID = Persons.PersonID
LEFT JOIN Fears ON Person_Fear.FearID = Fears.FearID
essaye ça
SELECT p.Name, p.SS, f.Fear
FROM Persons p
LEFT JOIN Person_Fear fp
ON p.PersonID = fp.PersonID
LEFT JOIN Fear f
ON f.FearID = fp.FearID
Essayez ce travail définitivement.
SELECT p.PersonID AS person_id,
p.Name, p.SS,
f.FearID AS fear_id,
f.Fear
FROM person_fear AS pf
LEFT JOIN persons AS p ON pf.PersonID = p.PersonID
LEFT JOIN fears AS f ON pf.PersonID = f.FearID
WHERE f.FearID = pf.FearID AND p.PersonID = pf.PersonID
Select
p.Name,
p.SS,
f.fear
From
Persons p
left join
Person_Fear pf
inner join
Fears f
on
pf.fearID = f.fearID
on
p.personID = pf.PersonID
Select Persons.Name, Persons.SS, Fears.Fear
From Persons
LEFT JOIN Persons_Fear
ON Persons.PersonID = Person_Fear.PersonID
LEFT JOIN Fears
ON Person_Fear.FearID = Fears.FearID;