SQL 添加额外的 INNER JOIN 后查询返回 0 行

SQL query returning 0 rows after adding extra INNER JOIN

这个问题解释起来很简单,但解决起来似乎并不那么简单。

这个SQL查询returns 0行:

SELECT app_handover.*, sys_logins.first_name, sys_logins.last_name, sys_logins.dept_id, org_depts.dept_name
FROM ((app_handover
INNER JOIN sys_logins ON app_handover.sent_by = sys_logins.id)
INNER JOIN org_depts ON sys_logins.dept_id = org_depts.id)
WHERE app_handover.id = '12'

然而,这一行 returns 1 行符合我的预期:

SELECT app_handover.*, sys_logins.first_name, sys_logins.last_name, sys_logins.dept_id
FROM app_handover
INNER JOIN sys_logins ON app_handover.sent_by = sys_logins.id
WHERE app_handover.id = '12'

唯一的区别是少了INNER JOINorg_deptstable.

我想要返回的是 app_handover 中的所有列值,它在其 sent_by 列中引用了 sys_logins.id。我还想要 org_depts.dept_name 的值,它被 sys_logins.dept_id.

引用

我想不出要使用的替代语法,但显然第一个示例中的逻辑存在错误,它返回 0 行而不是我预期的 1 行。

是的,LEFT JOIN 就是答案。匹配 sys_logins 行中 dept_id 的值为 NULL,因此在 org_depts 中未找到匹配记录。

此查询有效,现在 returns 1 行:

SELECT app_handover.*, sys_logins.first_name, sys_logins.last_name, sys_logins.dept_id, org_depts.dept_name
FROM ((app_handover
INNER JOIN sys_logins ON app_handover.sent_by = sys_logins.id)
LEFT JOIN org_depts ON sys_logins.dept_id = org_depts.id)
WHERE app_handover.id = '12'