编写Oracle SQL查询:找出覆盖id为1的企业全部业务领域的公司
Oracle SQL实现:筛选覆盖id为1的公司全部业务领域的公司
需求说明
从Company_Domain表中筛选出至少覆盖id=1的公司所有涉足业务领域的公司,预期输出id为3、7的公司。
实现方案
方案1:分组计数法(性能更优,适合数据量较大的场景)
核心逻辑:先统计id=1的公司的业务领域总数量,再将其他公司的业务和id=1的业务做匹配,匹配数量等于总数量的即为符合要求的公司。
SELECT cd.id FROM Company_Domain cd INNER JOIN Company_Domain cd_ref ON cd.Domain_Name = cd_ref.Domain_Name AND cd_ref.id = 1 WHERE cd.id != 1 -- 排除作为参照的id=1的公司 GROUP BY cd.id HAVING COUNT(DISTINCT cd.Domain_Name) = ( SELECT COUNT(DISTINCT Domain_Name) FROM Company_Domain WHERE id = 1 );
方案2:双重NOT EXISTS法(逻辑更直观,符合集合包含的语义)
核心逻辑:不存在任何一个id=1的公司的业务领域,是当前公司没有涉足的。
SELECT DISTINCT cd.id FROM Company_Domain cd WHERE cd.id != 1 AND NOT EXISTS ( -- 遍历id=1的所有业务领域 SELECT 1 FROM Company_Domain cd_ref WHERE cd_ref.id = 1 AND NOT EXISTS ( -- 检查当前公司是否覆盖了该业务领域 SELECT 1 FROM Company_Domain cd_curr WHERE cd_curr.id = cd.id AND cd_curr.Domain_Name = cd_ref.Domain_Name ) );
输出结果
两种方案执行后均返回符合要求的公司id:
| ID |
|---|
| 3 |
| 7 |
内容的提问来源于stack exchange,提问作者jeer
相关产品推荐
相关产品推荐

