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 JOIN
和org_depts
table.
我想要返回的是 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'
这个问题解释起来很简单,但解决起来似乎并不那么简单。
这个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 JOIN
和org_depts
table.
我想要返回的是 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'