即使JOIN失败也要选择行

时间:2019-07-09 11:50:37

标签: mysql sql join select

我猜我有以下初学者问题:

SELECT
    dl_dml_projects.*,
    dl_dml_catalogue.*,
    dl_dml_groups.*

FROM
    dl_dml_projects
        JOIN dl_dml_catalogue ON dl_dml_projects.dml_prj_catalogue_id = dl_dml_catalogue.dl_dml_catalogue_id
        JOIN dl_dml_groups ON dl_dml_catalogue.dml_catl_group = dl_dml_groups.dl_dml_groups_id

问题是当A行没有dl_dml_projects.dml_prj_catalogue_id时,似乎未选择并返回此行。

是否可以强制返回链接断开的这些行。例如,失败的联接的缺失值可能为NULL。

dl_dml_projects.dml_prj_catalogue_id应该是可选链接。

非常感谢您。

1 个答案:

答案 0 :(得分:3)

您似乎想要一个或两个外部联接。我猜是LEFT JOIN

SELECT p.*, c.*, g.*
FROM dl_dml_projects p LEFT JOIN
     dl_dml_catalogue c
     ON p.dml_prj_catalogue_id = c.dl_dml_catalogue_id LEFT JOIN
     dl_dml_groups g
     ON c.dml_catl_group = g.dl_dml_groups_id;

这会将所有行保留在第一个表中。如果其他表中没有匹配项,则对应的列将为NULL

请注意,这也引入了表别名。这些通常使查询更易于编写和阅读。

相关问题