_为什么这个 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 别名使查询更易于编写和阅读。