LEFT JOIN 查询中的 WHERE 子句
WHERE clause in LEFT JOIN query
所以我想得到所有的SSC职位,并得到尚未被占用的职位数量。但是,我不知何故陷入了 where 子句。
这是我的 table 结构:
这是我的查询
SELECT p.position_id, a.account_id
FROM positions p
LEFT JOIN ssc s ON s.position_id = p.position_id AND s.removed = 0
LEFT JOIN students stud ON stud.students_id = s.students_id
LEFT JOIN accounts a ON a.account_id = stud.account_id
WHERE p.user_level_id = 6
AND p.removed = 0
实际结果是这样的:
预期结果仅显示 account_id 中为 NULL 的字段。但是,如果我在查询中包含 AND a.account_id = NULL
,则结果为空。如果我将查询更改为:
SELECT p.position_id, a.account_id
FROM positions p
LEFT JOIN ssc s ON s.position_id = p.position_id AND s.removed = 0
LEFT JOIN students stud ON stud.students_id = s.students_id
LEFT JOIN accounts a ON a.account_id = stud.account_id AND a.account_id = NULL
WHERE p.user_level_id = 6
AND p.removed = 0
那么所有的账号ID都变成NULL
None 其中 =
NULL
值。使用 IS NULL
.
a.account_id IS NULL
您可以在此处阅读更多相关信息,https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html。您可能更喜欢使用空字符串或默认值 0
.
所以我想得到所有的SSC职位,并得到尚未被占用的职位数量。但是,我不知何故陷入了 where 子句。
这是我的 table 结构:
这是我的查询
SELECT p.position_id, a.account_id
FROM positions p
LEFT JOIN ssc s ON s.position_id = p.position_id AND s.removed = 0
LEFT JOIN students stud ON stud.students_id = s.students_id
LEFT JOIN accounts a ON a.account_id = stud.account_id
WHERE p.user_level_id = 6
AND p.removed = 0
实际结果是这样的:
预期结果仅显示 account_id 中为 NULL 的字段。但是,如果我在查询中包含 AND a.account_id = NULL
,则结果为空。如果我将查询更改为:
SELECT p.position_id, a.account_id
FROM positions p
LEFT JOIN ssc s ON s.position_id = p.position_id AND s.removed = 0
LEFT JOIN students stud ON stud.students_id = s.students_id
LEFT JOIN accounts a ON a.account_id = stud.account_id AND a.account_id = NULL
WHERE p.user_level_id = 6
AND p.removed = 0
那么所有的账号ID都变成NULL
None 其中 =
NULL
值。使用 IS NULL
.
a.account_id IS NULL
您可以在此处阅读更多相关信息,https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html。您可能更喜欢使用空字符串或默认值 0
.