我有这张表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
但结果相同。
有什么不对?我怎样才能得到理想的结果?
答案 0 :(得分:4)
将过滤器移至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
当您使用filter where子句时,对于不匹配的记录U_ID
将为NULL
,因此它将在结果中进行过滤。当您在ON
条件下使用文件管理器时,它会说明要连接的记录是什么而不是过滤。
答案 1 :(得分:2)
将WHERE
条件移至ON
以获得真实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