web-dev-qa-db-fra.com

MySQL LEFT JOIN 3 tables

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?

56
Joe

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
71
Ant P

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
21
echo_Me

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
16
Tanmay Patel
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
10
Aheho
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;
8
user9905475