SQL选择列共有的记录

时间:2014-08-25 19:36:51

标签: sql oracle

我有一个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*/

3 个答案:

答案 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
)