我有这个表exam
ID | Name | Date
_____________________
1 | E1 | 2017-1-1
1 | E2 | 2017-1-2
1 | E3 | 2017-1-3
和此表enroll
ID | U_ID | E_ID | Status
_________________________
1 | 1 | 1 | 0
1 | 1 | 2 | 1
1 | 2 | 1 | 1
我想要的结果是
Name | U_ID | Date | Status
_______________________________
E1 | 1 | 2017-1-1 | 0
E2 | 1 | 2017-1-2 | 1
E3 | 1 | 2017-1-3 | NULL
我尝试了:
SELECT Name , U_ID , Date , Status
FROM exam LEFT JOIN enroll ON exam.ID = enroll.E_ID
WHERE U_ID = 1
结果我得到了这个
Name | U_ID | Date | Status
_______________________________
E1 | 1 | 2017-1-1 | 0
E2 | 1 | 2017-1-2 | 1
也尝试了以下方法:
SELECT Name , U_ID , Date , Status
FROM exam LEFT OUTER JOIN enroll ON exam.ID = enroll.E_ID
WHERE U_ID = 1
但是结果相同。
怎么了?我如何获得所需的结果?
将过滤器移至ON
条件
SELECT Name , U_ID , Date , Status
FROM exam e
LEFT JOIN enroll en
ON e.ID = en.E_ID
AND en.U_ID = 1
当您使用滤波器子句中的过滤器时,对于非匹配记录,U_ID
将为NULL
,因此将过滤结果。当您在ON
条件下使用申报机时,它说要连接的记录是什么而不是过滤。
将WHERE
条件移至ON
以获取true left join
结果(而不是inner join
结果。)
SELECT Name , U_ID , Date , Status
FROM exam LEFT JOIN enroll ON exam.ID = enroll.E_ID
AND U_ID = 1