将2个不同的表连接到第三个表

Eva*_*iam 4 mysql sql join

我有一个SQL问题.我在图像中有3个表格.在前端(用户界面),我有一个selectone框来选择课程和员工自动完成.自动填充必须检索所有员工姓名以及所选课程的状态.

在此输入图像描述

我试过了

select e.id,per.id,t.status 
from employee e 
join person per on e.personId=per.id 
left join training t on e.id=t.employeeId`
Run Code Online (Sandbox Code Playgroud)

但是这会检索employeeId'1'的重复行.对于id为1的员工,我需要仅使用所选的courseId(从用户界面中选择)退出行.

简而言之,我需要所有员工的信息以及所选择的课程员工信息,而且我也不能重复这些信息.

如果选择的课程ID为34,则检索的输出必须包含

Empid,PersonName,Status
1, Ravi , 1; 
2, Meera , 0; 
3, Rahul ,0; 
4, Vinu, 0.
Run Code Online (Sandbox Code Playgroud)

我如何形成reqd sql查询?

根据提供的建议,我将接受的答案修改为(根据我的要求)

SELECT e.id,per.name,COALESCE(t.status,0)
FROM employee e 
JOIN person per ON e.personId=per.id 
LEFT JOIN training t ON e.id=t.employeeId
    AND t.courseId = ?
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 5

左连接的技巧是将左连接表上的条件添加到连接条件:

select e.id,per.id,t.status 
from employee e 
join person per on e.personId=per.id 
left join training t on e.id=t.employeeId
    and t.courseId = ?
Run Code Online (Sandbox Code Playgroud)

这只会尝试连接到特定的训练行.

如果将课程条件放入where子句,则会丢失左连接 - 它实际上变为内连接,因为where子句条件在连接完成执行.然而,在进行连接时执行连接条件中的条件.

作为一般性评论,许多人没有意识到您可以将非关键条件置于连接条件中.事实上,正如在这种情况下,它是获得所需输出的最简洁方法.