_为什么这个离开加入不给我一个结果?

时间:2016-01-10 14:03:33

标签: sql left-join

我有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是否为空,我不应该得到一个结果吗?

1 个答案:

答案 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 ;

请注意,表别名使查询更容易编写和读取。