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

SQL Server Join相关问题:筛选未全部为Approved状态的SectionId

实现方案

你可以用分组聚合加HAVING条件过滤,也可以用EXISTS子查询实现需求,两种实现都能兼容MySQL、PostgreSQL、SQL Server等主流SQL版本。

方案1:分组聚合实现

写法更简洁,适合需要同时统计其他分组指标的场景,假设你的表名为section_info,语句如下:

SELECT SectionId
FROM section_info
GROUP BY SectionId
-- 仅保留存在至少1条非Approved状态的SectionId
HAVING COUNT(CASE WHEN SectionStatus <> 'Approved' THEN 1 END) > 0;

逻辑说明

按SectionId分组后,CASE WHEN会把非Approved的记录标记为1,其余为NULL;COUNT统计时会忽略NULL值,统计结果大于0就说明该分组存在非Approved的记录,符合筛选要求。

方案2:EXISTS子查询实现

如果数据量较大且SectionId建有索引,该方案查询效率更高:

SELECT DISTINCT SectionId
FROM section_info t1
WHERE EXISTS (
    SELECT 1 FROM section_info t2
    WHERE t2.SectionId = t1.SectionId
    AND t2.SectionStatus <> 'Approved'
);

逻辑说明

只要某一个SectionId存在任意一条状态不是Approved的记录时,就会被查询返回,DISTINCT用来去重,避免同一个SectionId返回多次。

测试验证

两组测试数据执行后返回结果完全符合预期:

  1. 第一组测试数据返回:1、2、3
  2. 第二组测试数据返回:2、3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:09:02