2011-03-08 12 views
8

左外部結合を実行すると、結合されたテーブルを追加する前にクエリが返すすべてのレコードを取得することが期待されますが、テーブル(つまり、 '092387'のレコードがテーブル 'documentation'に存在しないので、そのレコードの 'filename'フィールドにnullが返されます)。左外部結合がプライマリテーブルからすべてのレコードを返さない

mysql> select documentation_reference.ref_docnumber 
      , documentation.filename 
     from documentation_reference 
     left outer join documentation on ref_docnumber=documentation.docnumber  
     where documentation_reference.docnumber='TP-036' 
     and documentation.status!=3; 
+---------------+-----------------+ 
| ref_docnumber | filename  | 
+---------------+-----------------+ 
| SOP-0042  | SOP-0042r39.pdf | 
+---------------+-----------------+ 
1 row in set (0.00 sec) 

mysql> select ref_docnumber 
     from documentation_reference 
     where documentation_reference.docnumber='TP-036'; 
+----------------------+ 
| ref_docnumber  | 
+----------------------+ 
| 092387    | 
| 1100218B    | 
| Applicable Item Spec | 
| SOP-0042    | 
+----------------------+ 
4 rows in set (0.00 sec) 

答えて

15

where句は、外部結合を内部結合に戻しています。 outer joinによって保存

非一致する行はすべてdocumentation.statusためNULL値ので、あなたのdocumentation.status != 3条件が(表現NULL !=3の結果はunknownないtrueである)これらをバックフィルタリングされますがあります。この問題はdocumentation.status != 3述語がJOIN状態に移動されていることを

select documentation_reference.ref_docnumber, 
     documentation.filename 
from documentation_reference 
     left outer join documentation 
     on ref_docnumber = documentation.docnumber 
      and documentation.status != 3 
where documentation_reference.docnumber = 'TP-036' 

注意を使用しないようにするに

+0

右...それでした。あなたの助けに感謝します。 –

0

あなたのdocumentation.status!=3の状態を確認してください...それは犯人かもしれません。あなたの予想されるレコードを削除すると思います。通常

この問題は

select documentation_reference.ref_docnumber, documentation.filename from documentation_reference left outer join documentation on ref_docnumber=documentation.docnumber 

チェック結果をランまず、パーツでクエリを実行し、どこでクエリを実行デバッグする - 彼らは一度変更する必要があり、結果を確認してください

select documentation_reference.ref_docnumber, documentation.filename from documentation_reference left outer join documentation on ref_docnumber=documentation.docnumber 
where documentation_reference.docnumber = 'TP-036' 

あなたは最終的な条件を追加します。 documentation.status!=3

あなたはおそらく、マーティンの助言に従って、exp結果を示します。

関連する問題