Domanda MySQL LEFT JOIN 3 tables


Ho 3 tavoli:

Persone (PersonID, Nome, SS)
Paure (FearID, Fear)
Person_Fear (ID, PersonID, FearID)

Ora vorrei elencare ogni persona con qualunque paura sia collegata a loro (possono essere paure multiple ma possono anche essere nessuna). La tabella delle persone deve essere mostrata anche se una persona non ha paura associata a loro.

Penso di aver bisogno di fare un SINISTRA SINISTRA, ma il mio codice non sembra funzionare:

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

Cosa sto facendo di sbagliato qui?


44
2018-04-25 18:30


origine


risposte:


Stai provando ad unirti Person_Fear.PersonID su Person_Fear.FearID - Questo non ha molto senso. Probabilmente vuoi qualcosa come:

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

Questo si unisce Persons su Fears tramite il tavolo intermedio Person_Fear. Perché il join tra Persons e Person_Fear è un LEFT JOIN, otterrai tutto Persons record.

In alternativa:

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

60
2018-04-25 18:33



prova questo

    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

17
2018-04-25 18:41



Prova questo sicuramente lavoro.

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

13
2017-08-30 08:32



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

7
2018-04-25 18:35



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;

1
2018-06-06 20:12