子查询或连接?
Posted
技术标签:
【中文标题】子查询或连接?【英文标题】:subquery or join? 【发布时间】:2017-11-27 18:13:24 【问题描述】:我正在使用子查询和连接来执行此语句: 显示财务部门现有的所有职位(请勿重复任何职位)
我的 Join 工作,我得到正确的输出,但子查询没有,我看不到错误 输出给了我这个:
select DISTINCT(job_title)
from jobs
where job_id = (select job_id from employees
where department_id =
(select department_id from departments
where department_name like 'finance'))
select DISTINCT(job_title) from jobs j
inner join employees e
on j.job_id = e.job_id
inner join departments d
on d.department_id = e.department_id
where department_name like 'finance'
【问题讨论】:
=
将 1 个值与一个值进行比较。您的子查询的结果可能是许多工作 ID。因此,您不能使用=
或!=
进行比较。您可以使用 IN
而不是 =
用 IN 代替 =
@PatrickHonorez 是的,它现在可以工作了。谢谢,没看到
【参考方案1】:
没有测试,你可能想要:
select DISTINCT(job_title)
from jobs
where job_id IN (select job_id from employees
where department_id IN
(select department_id from departments
where department_name like 'finance'))
【讨论】:
【参考方案2】:如果您单独运行子查询,它会显示不止一行。
当您执行相等操作时(job_id = something),作为查询的某事必须提供单个值作为结果,该值隐式不能出现在多行中)。
【讨论】:
以上是关于子查询或连接?的主要内容,如果未能解决你的问题,请参考以下文章