2011-03-08 85 views
8

當我執行左外連接時,我希望獲取查詢在添加連接表之前返回的所有記錄,但它只返回匹配連接的記錄表(即:表「文件」「092387」存在,所以我只想空返回該記錄的「文件名」字段中沒有記錄)我在做什麼錯?左外連接不返回主表中的所有記錄

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.statusNULL值,以便您的documentation.status != 3條件會過濾這些背出(表達NULL !=3的結果是unknowntrue)。

爲了避免這個問題,請使用

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' 

注意,documentation.status != 3謂詞移入JOIN條件。

+0

對......就是這樣。感謝您的幫助 - 這是有道理的。 – 2011-03-08 17:56:05

0

檢查documentation.status!=3條件......它可能是culprit..it是我想消除您的預計記錄。

通常調試此問題在運行部分查詢,首先運行 -

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結果。

相關問題