Sql 如何查询一个表中的所有行是否与另一个表中的一组行匹配?

Sql 如何查询一个表中的所有行是否与另一个表中的一组行匹配?,sql,oracle,Sql,Oracle,我有两张桌子 EXPERTISE EID,SCODE 101,4001 101,4002 101,4003 101,4004 101,4005 101,4006 102,4002 102,4003 102,4006 103,4001 103,4006 103,4004 104,4004 104,4006 105,4002 105,4003 105,4004 105,4006 106,4001 106,4002 106,4003 106,4004 106,4005 106,4006 及 特产 S

我有两张桌子

EXPERTISE
EID,SCODE
101,4001
101,4002
101,4003
101,4004
101,4005
101,4006
102,4002
102,4003
102,4006
103,4001
103,4006
103,4004
104,4004
104,4006
105,4002
105,4003
105,4004
105,4006
106,4001
106,4002
106,4003
106,4004
106,4005
106,4006

特产

SCODE,SNAME
4001,Cardiology
4002,Pediatrics
4003,Oncology
4004,Psychiatry
4005,Opthamology
4006,Internal

如何制定一个查询,返回每个专业的EID?

我认为最简单的方法是聚合和计数:

select e.eid
from expertise e
group by e.eid
having count(*) = (select count(*) from specialties);
这假设表中没有重复项,根据示例数据,这似乎是合理的。如果存在重复项,您可以使用
count(distinct)
而不是
count(*)

SELECT EID
FROM EXPERTISE
GROUP BY EID
HAVING COUNT(SCODE) = (SELECT COUNT(*) FROM SPECIALTY)