首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个不同的表连接到第三个表

将两个不同的表连接到第三个表
EN

Stack Overflow用户
提问于 2014-07-04 20:42:44
回答 1查看 98关注 0票数 4

我有一个sql问题。我有三张桌子,就像图片里的一样。在前端(用户界面),我有一个selectone框来选择一个课程和一个员工自动完成。“自动完成”必须检索所选课程的所有员工姓名和状态。

我试过了

代码语言:javascript
复制
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,则检索到的输出必须包含

代码语言:javascript
复制
Empid,PersonName,Status
1, Ravi , 1; 
2, Meera , 0; 
3, Rahul ,0; 
4, Vinu, 0.

如何形成reqd sql查询?

根据所提供的建议,我对(根据我的要求)接受的答案作了一些修改。

代码语言:javascript
复制
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 = ?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-04 20:53:26

左联接的诀窍是将左侧联接表上的条件添加到联接条件中:

代码语言:javascript
复制
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条件中的条件是在进行连接时执行的。

作为一般性评论,许多人没有意识到您可以将非键条件放入一个连接条件中。事实上,就像在这种情况下一样,它是实现所需输出的最干净的方法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24580544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档