簡體   English   中英

Left Outer Join不返回主表中的所有記錄

[英]Left Outer Join not returning all records from primary table

當我執行左外連接時,我希望獲得查詢在添加連接表之前返回的所有記錄,但它只返回與連接表匹配的記錄(即:表中不存在'092387'的記錄'文檔',所以我只想為該記錄的'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)

您的where子句將外部聯接轉換回內部聯接。

outer join保留的非匹配行將全部具有documentation.status NULL值,因此您的documentation.status != 3條件將過濾掉這些(表達式的結果為NULL !=3 unknown不是true )。

避免使用此問題

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條件。

檢查你的documentation.status!=3條件......它可能是罪魁禍首......我認為是否會消除你的預期記錄。

通常要調試這個問題,運行你的查詢部分,首先運行 -

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

檢查結果,然后運行查詢與where -

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檢查它們應該更改的結果

您應該遵循Martin的建議並運行他的代碼以獲得預期的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM