_为什么这个 left join 没有给我结果?
_Why does this left join not give me an results?
我有 3 个 table,如下所示(每个 table 都有不影响查询的附加列):
课程
+-----------+
| course_id |
+-----------+
| 37 |
+-----------+
Course_enrollment
+-----------+--------+
| course_id | user_id|
+-----------+--------+
| 37 | 91 |
| 37 | 89 |
+-----------+--------+
Completed_courses
+-----------+--------------+
| course_id | user_id |
+-----------+--------------+
| 37 | 89 |
+-----------+--------------+
我不确定为什么我在以下查询中得到空结果:
SELECT
courses.*, completed_courses.*, course_enrollment.*
FROM
courses
INNER JOIN
course_enrollment ON courses.course_id = course_enrollment.course_id
LEFT JOIN
completed_courses ON (course_enrollment.course_id = completed_courses.course_id)
WHERE
course_enrollment.user_id = '91'
AND completed_courses.course_id IS NULL
因为我正在使用 LEFT JOIN
并检查 completed_courses.course_id 是否为 NULL,我不应该得到一个结果吗?
因为您仅通过课程 ID 加入 completed_courses
。该连接还需要 user_id
.
我想你打算:
SELECT c.*, cc.*, ce.*
FROM courses c INNER JOIN
course_enrollment ce
ON c.course_id = ce.course_id LEFT JOIN
completed_courses cc
ON ce.course_id = cc.course_id AND
ce.user_id = cc.user_id
WHERE ce.user_id = '91' AND
cc.course_id IS NULL ;
请注意,table 别名使查询更易于编写和阅读。
我有 3 个 table,如下所示(每个 table 都有不影响查询的附加列):
课程
+-----------+
| course_id |
+-----------+
| 37 |
+-----------+
Course_enrollment
+-----------+--------+
| course_id | user_id|
+-----------+--------+
| 37 | 91 |
| 37 | 89 |
+-----------+--------+
Completed_courses
+-----------+--------------+
| course_id | user_id |
+-----------+--------------+
| 37 | 89 |
+-----------+--------------+
我不确定为什么我在以下查询中得到空结果:
SELECT
courses.*, completed_courses.*, course_enrollment.*
FROM
courses
INNER JOIN
course_enrollment ON courses.course_id = course_enrollment.course_id
LEFT JOIN
completed_courses ON (course_enrollment.course_id = completed_courses.course_id)
WHERE
course_enrollment.user_id = '91'
AND completed_courses.course_id IS NULL
因为我正在使用 LEFT JOIN
并检查 completed_courses.course_id 是否为 NULL,我不应该得到一个结果吗?
因为您仅通过课程 ID 加入 completed_courses
。该连接还需要 user_id
.
我想你打算:
SELECT c.*, cc.*, ce.*
FROM courses c INNER JOIN
course_enrollment ce
ON c.course_id = ce.course_id LEFT JOIN
completed_courses cc
ON ce.course_id = cc.course_id AND
ce.user_id = cc.user_id
WHERE ce.user_id = '91' AND
cc.course_id IS NULL ;
请注意,table 别名使查询更易于编写和阅读。