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
ここで何が間違っていますか?
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
これは、中間テーブルPerson_Fear
を介してPersons
をFears
に結合します。 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
これを試して
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
これは間違いなく動作してみてください。
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
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
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;