我有一个emp
这样的表
EMPNO | JOB | DEPTNO
_____________________
1 | A | 10
2 | B | 20
3 | C | 10
4 | A | 20
我想写一个查询来列出部门10和20共有的工作。
因此,根据提供的数据输出应为
A
这对于deptno 10和20都是常见的
我正在尝试这个,但它没有给我任何输出。
select job, deptNo from emp group by job having deptno = 20 and deptno = 10; /*6*/
答案 0 :(得分:3)
试试这个
select job
from emp e1
where e1.deptno = 10
and exists ( select 1
from emp e2
where e2.deptno = 20
and e1.job = e2.job
)
group by job;
答案 1 :(得分:2)
您可以在HAVING
子句中使用具有所需条件的聚合函数:
SELECT job
FROM emp
GROUP BY job
HAVING COUNT(CASE WHEN deptNo IN (10, 20) THEN 1 END) = 2
答案 2 :(得分:0)
字段不能同时为两个值。使用Or
代替And
。此外,Having
没有意义,只需使用Where
。
select job, deptNo
from emp
Where deptno = 20
Or deptno = 10
group by job
您还可以使用与In
具有相同效果的Or
:
select job, deptNo
from emp
Where deptno In (10, 20)
group by job
编辑:您可以执行此操作以获取具有两个值的作业:
Select Distinct a.job
From emp a
Where DeptNo = 10
And Exists
(
Select 1
From Emp b
Where a.Job = b.Job
And b.deptNo = 20
)