子查询或连接?

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),作为查询的某事必须提供单个值作为结果,该值隐式不能出现在多行中)。

【讨论】:

以上是关于子查询或连接?的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL基础九--子查询和连接

从连接或子查询中选择记录作为列(子数组)

连接和/或子查询或排名函数

MySQL--5子查询与连接小结

子查询或连接条件中的where子句之间的区别

MSSQL之五 连接查询与子查询