[英]MySQL Left Outer Join with Count from joined table, Show all records
[英]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.