如何解决难以理解内部联接
我试图了解内部联接的正确使用,但是当我不得不调用两个以上的表时遇到了麻烦,我使用oracle HR模式进行测试,因此例如我尝试了以下查询:
select emps.employee_id,emps.first_name,dep.department_name,dep.department_id,jh.job_id
from employees emps
inner join departments dep
on emps.department_id = dep.department_id
inner join job_history jh
on dep.department_id = jh.department_id;
显示以下结果:
我知道它的错误,因为首先它显示重复的行,其次如果我运行此查询
select * from job_history where employee_id = 100;
它没有显示任何结果,这意味着不应在第一个查询的结果中出现雇员100(十个),我希望第一个查询向我显示有关雇员,部门以及job_history的数据结果,拥有department_id
HR(人力资源架构):
有人可以帮助我,我缺少什么,为什么它显示重复的行?
解决方法
job_history
表具有3个外键:
-
employee_id
-
job_id
-
department_id
您的INNER JOIN
仅加入DEPARTMENT_ID
,因此您可以将某位员工与其部门内发生的任何工作的工作历史进行匹配,但不一定是该员工特定的工作。相反,您可能想加入employee_id
或employee_id
和department_id
的组合。
因此,如果您想要该员工在任何部门的工作历史记录:
select emps.employee_id,emps.first_name,dep.department_name,dep.department_id,jh.job_id
from employees emps
inner join departments dep
on ( emps.department_id = dep.department_id )
inner join job_history jh
on ( emps.employee_id = jh.employee_id );
或者,如果您想要该部门内该员工的工作历史记录:
select emps.employee_id,jh.job_id
from employees emps
inner join departments dep
on ( emps.department_id = dep.department_id )
inner join job_history jh
on ( emps.employee_id = jh.employee_id
and emps.department_id = jh.department_id );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。