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

如何用SQL筛选仅含ISC记录的BATCH_ID?

解决方案:筛选仅存在ISC记录的BATCH_ID

你之前的WHERE RESULT LIKE '%ISC%'只能筛选出包含ISC的行,但无法排除那些同时存在其他RESULT(比如LLC)的BATCH_ID,以下是几种可行的SQL方案:

方法1:GROUP BY + HAVING(通用型,适配多数数据库)

通过分组统计每个BATCH_ID下的记录特征,确保仅包含ISC:

SELECT BATCH_ID
FROM PM_BATCH_ST
GROUP BY BATCH_ID
HAVING SUM(CASE WHEN RESULT != 'ISC' THEN 1 ELSE 0 END) = 0;

原理:用CASE语句统计每个BATCH_ID下非ISC的记录数,结果为0则说明该BATCH_ID只有ISC记录。

也可以用更直观的写法:

SELECT BATCH_ID
FROM PM_BATCH_ST
GROUP BY BATCH_ID
HAVING COUNT(DISTINCT RESULT) = 1 AND MAX(RESULT) = 'ISC';

原理:先确保该BATCH_ID只有一种RESULT,再确认这个RESULT是ISC。

方法2:NOT EXISTS子查询

通过子查询排除存在非ISC记录的BATCH_ID:

SELECT DISTINCT BATCH_ID
FROM PM_BATCH_ST t1
WHERE RESULT = 'ISC'
  AND NOT EXISTS (
    SELECT 1 
    FROM PM_BATCH_ST t2
    WHERE t2.BATCH_ID = t1.BATCH_ID
      AND t2.RESULT != 'ISC'
  );

原理:先定位有ISC的BATCH_ID,再排除掉那些存在其他RESULT的ID。

方法3:EXCEPT/MINUS(按需选择,依数据库类型)

如果你的数据库支持集合差操作,可以用这种简洁写法:

  • PostgreSQL/SQL Server用EXCEPT:
SELECT BATCH_ID FROM PM_BATCH_ST WHERE RESULT = 'ISC'
EXCEPT
SELECT BATCH_ID FROM PM_BATCH_ST WHERE RESULT != 'ISC';
  • Oracle用MINUS:
SELECT BATCH_ID FROM PM_BATCH_ST WHERE RESULT = 'ISC'
MINUS
SELECT BATCH_ID FROM PM_BATCH_ST WHERE RESULT != 'ISC';

原理:取所有包含ISC的BATCH_ID,减去存在非ISC的BATCH_ID,剩余的就是仅存ISC的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:36