Подтвердить что ты не робот

MySQL LEFT JOIN 3 таблицы

У меня есть 3 таблицы:

Persons (PersonID, Name, SS)
Fears (FearID, Fear)
Person_Fear (ID, PersonID, FearID)

Теперь я хотел бы перечислить каждого человека с каким-либо страхом, связанным с ними (может быть много страхов, но также может быть и ником). Таблица лиц следует показывать, даже если у человека нет страха, связанного с ними.

Я думаю, мне нужно сделать LEFT JOIN, но мой код, похоже, не работает:

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

Что я здесь делаю неправильно? Спасибо заранее.

4b9b3361

Ответ 1

Вы пытаетесь присоединиться к Person_Fear.PersonID на Person_Fear.FearID - это не имеет смысла. Вероятно, вы хотите что-то вроде:

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

Это соединяется с Persons на Fears через промежуточную таблицу Person_Fear. Поскольку соединение между Persons и Person_Fear равно LEFT JOIN, вы получите все записи Persons.

В качестве альтернативы:

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

Ответ 2

попробуйте это

    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

Ответ 3

Попробуйте это определенно.

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

Ответ 4

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