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

如何筛选Table A中对应Table B全为Inactive状态的项

解决思路与SQL实现方案

嘿,你已经找对了方向——GROUP BY确实是可行的路径之一,我给你分享几种实用的实现方法,帮你精准筛选出符合要求的item:

方法一:GROUP BY + HAVING 聚合验证

这种方法的核心是把每个item对应的Table B记录聚合成组,然后验证组内没有任何active=1(活跃)的记录。有两种常见的写法:

写法1:通过最大值判断

因为active只有0和1两种状态,如果某个item的所有记录都是0,那分组后的最大值必然是0;只要有一条是1,最大值就会变成1。

SELECT a.item
FROM TableA a
JOIN TableB b ON a.item = b.item
GROUP BY a.item
HAVING MAX(b.active) = 0;

写法2:统计活跃记录数

直接统计分组内active=1的记录数量,只要数量为0,就说明所有记录都是Inactive。

SELECT a.item
FROM TableA a
JOIN TableB b ON a.item = b.item
GROUP BY a.item
HAVING COUNT(CASE WHEN b.active = 1 THEN 1 END) = 0;

方法二:NOT EXISTS 反向排除

这种方法逻辑更直观:找出Table A中不存在任何一条对应Table B里active=1记录的item。当表数据量较大时,这种写法的执行效率往往更优。

SELECT a.item
FROM TableA a
WHERE NOT EXISTS (
    SELECT 1
    FROM TableB b
    WHERE b.item = a.item
    AND b.active = 1
);

补充:处理Table B中无对应记录的情况

如果你的业务场景中,Table B可能存在某个item没有任何记录(即该item在B中无数据),且需要把这类item也纳入结果(默认视为全Inactive),可以调整GROUP BY的写法:

SELECT a.item
FROM TableA a
LEFT JOIN TableB b ON a.item = b.item
GROUP BY a.item
HAVING MAX(COALESCE(b.active, 0)) = 0;

这里用COALESCE把NULL(无记录的情况)转换为0,确保这类item也能被筛选出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:34