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)