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

SQL实现查询跨多个类别出现的case_id对应全量记录

需求说明

你需要从名为cte的结果集中,筛选出**跨多个product_owner类别出现的case_id**关联的所有全字段记录。
原cte表字段及样例数据如下:

product_ownerproduct_owneridowner_locationowner_locationidcase_idunique_id
red123得克萨斯州3211234589076
red123得克萨斯州3211234589075
blue456纽约7861267890768
blue456纽约7861267890769
red123得克萨斯州3211267879072

以上样例中case_id=12678同时归属red、blue两个产品负责人类别,是需要保留的目标数据,期望输出结果如下:

product_ownerproduct_owneridowner_locationowner_locationidcase_idunique_id
blue456纽约7861267890768
blue456纽约7861267890769
red123得克萨斯州3211267879072
原有SQL的问题

你之前写的SQL如下:

SELECT DISTINCT 
cte.product_owner, 
cte.product_ownerid,
cte.owner_location,
cte.owner_locationid, 
cte.Case_ID, 
cte.unique_id
FROM cte 
JOIN (SELECT Case_ID FROM cte
GROUP BY Case_ID
HAVING count (DISTINCT unique_id) >1) y
ON cte.Case_ID = y.Case_ID
ORDER BY cte.Case_Reference_ID

执行无法返回预期结果的原因有两个:

  • 跨类别判断逻辑错误:子查询中用COUNT(DISTINCT unique_id) >1作为筛选条件,会把同一类别下有多条记录的case也匹配出来,比如样例中case_id=12345仅属于red类别,但因为有2个不同unique_id,会被错误保留。
  • 排序字段不存在:最后ORDER BY引用的Case_Reference_ID字段在cte表中不存在,会直接触发执行报错。
正确实现代码

核心逻辑是先找出所有关联了2个及以上不同product_owner的case_id,再关联原表取出这些case对应的所有记录即可,不需要额外加DISTINCT去重(unique_id是行唯一标识,不存在完全重复的行):

SELECT 
    cte.product_owner, 
    cte.product_ownerid,
    cte.owner_location,
    cte.owner_locationid, 
    cte.case_id, 
    cte.unique_id
FROM cte 
INNER JOIN (
    SELECT case_id 
    FROM cte
    GROUP BY case_id
    HAVING COUNT(DISTINCT product_owner) > 1
) valid_case
ON cte.case_id = valid_case.case_id
ORDER BY cte.case_id;

内容的提问来源于stack exchange,提问作者On_demand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:57:13