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
Что я здесь делаю неправильно? Спасибо заранее.
Ответы
Ответ 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