第一个表中的所有行与第二个表连接

时间:2017-10-02 10:23:54

标签: mysql sql

我有这张表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

但结果相同。

有什么不对?我怎样才能得到理想的结果?

2 个答案:

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