You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:08