web-dev-qa-db-ja.com

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 

ここで何が間違っていますか?

56
Joe

Person_Fear.PersonIDPerson_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を介してPersonsFearsに結合します。 PersonsPerson_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
71
Ant P

これを試して

    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

これは間違いなく動作してみてください。

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