如何在JOIN关联失败时仍返回dl_dml_projects的记录?
解决方案:使用LEFT JOIN替换INNER JOIN
这问题很常见,只需要把你的内连接改成左连接就能满足需求,具体修改后的SQL语句如下:
SELECT dl_dml_projects.*, dl_dml_catalogue.*, dl_dml_groups.* FROM dl_dml_projects LEFT JOIN dl_dml_catalogue ON dl_dml_projects.dml_prj_catalogue_id = dl_dml_catalogue.dl_dml_catalogue_id LEFT JOIN dl_dml_groups ON dl_dml_catalogue.dml_catl_group = dl_dml_groups.dl_dml_groups_id;
为什么这样改?
- 你原来用的
JOIN其实是INNER JOIN(内连接),它的逻辑是只返回所有关联条件都匹配的行。当dl_dml_projects.dml_prj_catalogue_id为空时,无法和dl_dml_catalogue表的主键匹配,所以这些行就被过滤掉了。 - **LEFT JOIN(左连接)**则是以
FROM后的第一个表(这里是dl_dml_projects)作为主表,强制保留主表的所有行:- 如果
dl_dml_catalogue中有匹配的记录,就正常关联返回对应字段; - 如果没有匹配(比如
dml_prj_catalogue_id为空),dl_dml_catalogue的所有字段会用NULL填充。
- 如果
- 第二个关联也要改成
LEFT JOIN:如果不修改,当dl_dml_catalogue的匹配记录不存在时,内连接会再次过滤掉这些行,导致你还是看不到dml_prj_catalogue_id为空的项目行。
内容的提问来源于stack exchange,提问作者fpdragon
相关产品推荐
相关产品推荐

