Sql 查找匹配多个行值的外键

Sql 查找匹配多个行值的外键,sql,oracle,Sql,Oracle,我有一张这样的桌子 person_id | department 1 | a 1 | b 2 | a 2 | c 3 | b 3 | a 并且希望查询返回属于部门a和部门b的所有人员id。我想这应该是一个类似于 select person_id from table group by person_id having .... 但我不太明白。

我有一张这样的桌子

person_id   |   department
1           |   a
1           |   b
2           |   a
2           |   c
3           |   b
3           |   a
并且希望查询返回属于部门a和部门b的所有人员id。我想这应该是一个类似于

select person_id from table group by person_id having ....
但我不太明白。有人知道我怎么做吗

编辑:我想我可以做到以下几点。但这似乎是一个黑客

select person_id from table where department='A' or department='B' 
     group by person_id having count(1) > 1

注意:只有当一个人可以多次成为同一部门的成员时,才需要DISTINCT。

您也可以通过子查询实现这一点:

SELECT person_id 
FROM table t1 
WHERE t1.department = 'a' 
    AND EXISTS (SELECT 1 
            FROM table t2 
            WHERE t2.department = 'b' 
                AND t1.person_id = t2.person_id`)
SELECT person_id 
FROM table t1 
WHERE t1.department = 'a' 
    AND EXISTS (SELECT 1 
            FROM table t2 
            WHERE t2.department = 'b' 
                AND t1.person_id = t2.person_id`)