はい、あなたの場合refernce "where myfield is null"以外のものを含むwhere句の左外部ジョインの右辺は、内部ジョインを作成したことになります。これは、インラインテーブルに一致しないすべてのレコードを含む、その条件を満たすものを除外するためです。他の非内部結合と同じです。それを回避するには、条件を結合に入れます。例(これは内部結合に変換します):
Select field1, field2 from mytable mt
left join mytable2 mt2 on mt.id = m2.id and mt2.field2 = 'test'
where mt1.field1 = 'hello'
は、私はまた、あなたがコメントで言った何かにコメントしたいが、私の応答は次のようになり考え出し:
Select field1, field2 from mytable mt
left join mytable2 mt2 on mt.id = m2.id
where mt1.field1 = 'hello' and mt2.field2 = 'test'
リライトが左を維持するためには、参加します別のコメントには長すぎます。
"選択...内部結合Bをオン(A.id = B.a_id)、C、D、FここでA.id = F.id" to: "選択...内部からA.id = F.a_idのBの結合(A.id = B.a_id)、C、Dの内部結合F:
あなたはこのような構文を組み合わせたくありません。これは維持することが非常に困難になります。事実、古いスタイルのカンマ構文を使用することはお勧めしません。これは、誤ったクロス結合の対象となるためです。だからあなたの例では、私は(少なくとも維持誰かがクロスが事故によって代わりにやったことの参加indended知っている)あなたが現在取得結果セットを取得するために書くでしょう:
Select ... From A
INNER JOIN B on A.id = B.a_id
INNER JOIN F on A.id = F.a_id
CROSS JOIN C
CROSS JOIN D
Altenativelyをクロスは偶発で参加する場合は、コードは、に変更します
Select ... From A
INNER JOIN B on A.id = B.a_id
INNER JOIN F on A.id = F.a_id
INNER JOIN C on (fill in the join fields)
INNER JOIN D on (fill in the join fields)
また、この等価のようにかなっている: 「を選択... A内部から(A.id = B.a_id)にBに参加し、C、D、F A. (Aid = B.a_id)、C、Dインナー・ジョイン・F on A.id = F.a_id " 実際には、主な問題は、DはAではAとAの結合があり、Aは式の前にあるため、Inner Joinは正しく動作して、同じ結果セットを返すように2つのケースを減らしますか? – umar