我猜我有以下初学者问题:
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应该是可选链接。
非常感谢您。
答案 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
。
请注意,这也引入了表别名。这些通常使查询更易于编写和阅读。