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

时间:2014-07-04 20:42:44

标签: mysql sql join

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

enter image description here

我试过

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`

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

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

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

Empid,PersonName,Status
1, Ravi , 1; 
2, Meera , 0; 
3, Rahul ,0; 
4, Vinu, 0.

如何构建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 = ?

1 个答案:

答案 0 :(得分:5)

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

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 = ?

这只会尝试加入特定的训练行。

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

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