【发布时间】:2020-09-25 22:05:29
【问题描述】:
我试图理解内部连接的正确使用,但是当我必须调用超过 2 个表时遇到问题,我使用 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 (steven) 不应该出现在第一个查询的结果中,我希望第一个查询向我显示有关员工、部门以及 job_history 的数据结果有共同的department_id
HR(人力资源架构):
谁能帮助我,我缺少什么,为什么它显示重复的行?
【问题讨论】:
-
您看到的是笛卡尔积的结果,当您的联接设置不正确时会发生这种情况(认识到笛卡尔在极少数用例中是可取的)。对连接语法进行快速的 Google 搜索将是一个很好的起点。另请查看有关笛卡尔积的出色问答。 stackoverflow.com/questions/30955338/…
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
-
请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。只提供您需要的东西并将其与您的问题联系起来。在图片中包含图例/键和说明。
-
@philipxy OP 声明他们正在使用 HR 模式;这是由 Oracle 生成的标准模式,可以免费下载和安装,并且可以与 Oracle 数据库一起预安装(如果您选择该安装选项)。
-
@MT0 这并没有改变他们应该对我的 cmets 采取行动的事实。它甚至不相关。 How to Ask
标签: sql oracle join inner-join