it-swarm.com.de

MySQL LEFT JOIN 3-Tabellen

Ich habe 3 Tische:

Personen (PersonID, Name, SS) 
 Ängste (FearID, Fear) 
 Person_Fear (ID, PersonID, FearID)

Jetzt möchte ich jeden Menschen mit der Angst auflisten, die mit ihm verbunden ist (kann mehrere Ängste sein, kann aber auch keine sein). Die Personentabelle muss angezeigt werden, auch wenn mit einer Person keine Angst verbunden ist.

Ich glaube, ich muss LEFT JOIN machen, aber mein Code scheint nicht zu funktionieren:

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 

Was mache ich hier falsch?

56
Joe

Sie versuchen, Person_Fear.PersonID Mit Person_Fear.FearID Zu verknüpfen - das ergibt eigentlich keinen Sinn. Sie möchten wahrscheinlich etwas wie:

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

Dies verbindet Persons über die Zwischentabelle Person_Fear Mit Fears. Da der Join zwischen Persons und Person_Fear Ein LEFT JOIN Ist, erhalten Sie alle Persons Datensätze.

Alternative:

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

versuche dies

    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

Versuchen Sie dies auf jeden Fall zu arbeiten.

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