我有3个表,如下所示(每个表都有其他不会影响查询的列):
课程
+-----------+
| 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是否为空,我不应该得到一个结果吗?
答案 0 :(得分:2)
因为您只在课程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 ;
请注意,表别名使查询更容易编写和读取。