Left Outer Join不返回主表中的所有记录

Ted*_*ler 8 mysql join outer-join

当我执行左外连接时,我希望获得查询在添加连接表之前返回的所有记录,但它只返回与连接表匹配的记录(即:表中不存在'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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 15

您的where子句将外部联接转换回内部联接.

由储存的非匹配的行outer join会都NULL为值documentation.status,以便您的documentation.status != 3病情会过滤这些背出(表达式的结果NULL !=3unknown不是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'  
Run Code Online (Sandbox Code Playgroud)

请注意,documentation.status != 3谓词将移入JOIN条件中.