2012-01-04 19 views
3

に依存性を有するアウタージョインI 3つの表A、BおよびTMySQLの参加テーブルは複数のテーブル

を有するTは、それぞれ表AおよびBへの外部キーを保持しています。

今、私はTが空であっても(A、B、T)のすべての行を取得したいと思います。

SELECT * from 

A 
LEFT OUTER JOIN T t1 ON t1.A_ID = A.id, 
B 
LEFT OUTER JOIN T t2 ON t2.B_ID = B.id 

WHERE A.B_ID = B.ID 

今の問題は、私は次の内容を追加しますので、私はあまりにも多くの行を取得することです:

AND t1.id = t2.id 

しかし、今、私は私を含む経て最初の場所で避けることを試みた全く行を取得しませんLEFT OUTER JOIN。

EDIT:私の質問は、外部キー依存関係が1つ以上のテーブル(この場合はA + B)に与えられた2つの左外部結合を必要とするテーブルT他の方法がありますか?単に二左参加、一部のユーザーは、それは外の範囲であるとして働くことができない提案のようにテーブルAに参照のうえ

は、また here
を説明しますが、括弧で両方のテーブルを囲むのであれば、それは動作します:

SELECT * from (A, B) 
LEFT OUTER JOIN T t ON t.A_ID = A.id and t.B_ID = B.id 
+2

SELECT * FROM (A, B) LEFT OUTER JOIN T ON T.A_ID = A.id AND T.B_ID = B.id 

そして、AとBは関係が最後に次の行を追加している場合A.B_ID = B.IDの目的は何ですか?おそらくテーブル定義とサンプルデータを投稿できますか? –

+0

あなたは次のようなものを試してみるとよいでしょう: http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql –

+0

あなた自身の健全性(そしてある程度は私たちのもの)のためにミックス '、' JOIN'表記になります。好ましくは 'JOIN'を使って試してみてください。また、 '(A LEFT JOIN T ON ???)INNER JOIN(B LEFT JOIN T ON?)ON 'のように、クエリの部分を' – MatBailie

答えて

3

この文字列で検索してください: AとBがありません任意の関係場合:私は誤解しているかもしれ

WHERE A.B_ID = B.ID 
+0

これは、外部結合ではA.idが "不明"なのでこれは機能しないと思います。あなたはテーブル-B後にテーブル-A – recalcitrant

+0

私はそれをテストしていると述べています。できます。あなたのテーブル構造があなたが与えた通りであれば。 –

+0

あなたの解決策は、私がA、Bを括弧で囲むと機能します。=>(A、B)。たぶんこれはMySQLの必須項目です。 – recalcitrant

3

select * 
from A 
join B on A.B_ID = B.ID 
left join T on T.A_ID = a.id and T.B_ID = b.id 

...私が正しくあなたの質問を理解してきたと仮定すると、あなたは定期的な予定のお試しは、インナーは

AとBの間の結合します
+0

この両方のテーブルに何の関係もない場合、 "A.B_ID = B.ID"でどのように使用できますか? "TはテーブルAとテーブルBに外部キーを保持する"。 –

+2

元の質問の 'WHERE'節は、AとBの間の関係を意味します – rejj

+0

+1、私は2番目の' ON'節が2つの比較を 'AND'または' OR' 。 –

0

私が正しく理解していれば、これはあなたのために働くでしょうか?

SELECT * from 
A 
LEFT OUTER JOIN T t1 ON t1.A_ID = A.id, 
B 
LEFT OUTER JOIN T t2 ON (t2.B_ID = B.id AND t1.id = t2.id) 

WHERE A.B_ID = B.ID 
+0

これは問題です、私は解決しようとしています:t1.idは2番目のLEFT OUTER JOINでは不明です。 – recalcitrant

+0

OOps、申し訳ありませんが、コンマに気付かなかった...おそらくSELECT *からA LEFT OUTER JOIN T t1 ON t1.A_ID = A.id LEFT OUTER JOIN B ON(t1.B_ID = B.idとA.B_ID = B.ID) は –

+0

に役立ちますが、 ** A **と** B **の間にはどのような関係がありますか? –

関連する問題