2013-04-25 54 views
42

を登録しよう。人のテーブルは、人がそれにリンクされている恐れがない場合でも表示する必要があります。MySQLのLEFTは、私は3つのテーブルを持っている3つのテーブル

は、私はLEFT JOINを行う必要があると思いますが、私のコードは動作していないよう:

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

は、私がここで間違って何をしているのですか?前もって感謝します。

+0

あなたは私のソリューションを試しましたか? –

答えて

56

Person_Fear.PersonIDPerson_Fear.FearIDに参加しようとしています。これは実際には意味がありません。これは、中間テーブルPerson_Fear経由FearsPersonsに参加し

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 

:あなたは、おそらくのような何かをしたいです。 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 
+0

元の投稿で3つのテーブルすべてを参照していなかったので、私はdownvotedしました。あなたはそれを修正しましたが、On節の入れ子が間違っています。 – Aheho

+0

+1 - これはこれまでの正しい答え(少なくとも編集後)のように見えます。 – Tom

+0

@Aheho True - 彼のテーブル定義はもともとコードブロックになかったので、私はそれらを逃した。私はネスティングを修正しましたが、これは私の答えをあなたのものとほとんど同じにするので、私は代替案も提供します。 –

7
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 
17

この

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 
+0

これは私のために働く。 –

12

が、これは間違いなく仕事してみてみてください。

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 
+0

私はこれを動作させることができませんでしたが、私は 'AS'変数を削除して完全なテーブル名を使用して解決しました – RozzA

+0

誰かがLeft、Left、Left、 – anveshtummala

関連する問題