我有一个sql问题。我有三张桌子,就像图片里的一样。在前端(用户界面),我有一个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`但这将检索employeeId '1‘的重复行。对于id为1的员工,我只需要使用选中的courseId (从用户界面中选择)的行退出。)
总之,我需要所有员工的信息,加上所选课程的员工信息,也不能重复empIds。
如果选择的课程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 = ?发布于 2014-07-04 20:53:26
左联接的诀窍是将左侧联接表上的条件添加到联接条件中:
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子句条件是在join生成后执行的。但是,在join条件中的条件是在进行连接时执行的。
作为一般性评论,许多人没有意识到您可以将非键条件放入一个连接条件中。事实上,就像在这种情况下一样,它是实现所需输出的最干净的方法。
https://stackoverflow.com/questions/24580544
复制相似问题