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

如何查询布尔列全为FALSE的ID?SQL语句优化求助

解决SQL筛选全为FALSE的ID问题

嘿,我明白你的需求啦!你现在的语句只是找出了至少包含一条FALSE记录的ID,但我们要的是所有记录的Boolean列都是FALSE的ID,这俩区别可大了~

问题分析

原语句:

SELECT DISTINCT ID, Boolean FROM FakeTable WHERE Boolean = 'False'

它会把只要有FALSE的ID都捞出来(比如ID1、2都有FALSE,所以也会被选中),但我们需要排除那些有TRUE记录的ID,只留下全是FALSE的。

几种可行的优化方案

方案1:使用NOT EXISTS子查询

这是最直观的思路——找那些不存在对应ID下有TRUE记录的ID:

SELECT DISTINCT ID
FROM FakeTable ft1
WHERE NOT EXISTS (
    SELECT 1
    FROM FakeTable ft2
    WHERE ft1.ID = ft2.ID
    AND ft2.Boolean = 'TRUE'
)

原理:对于每个ID,检查有没有对应的TRUE记录,如果没有,就保留这个ID。

方案2:使用GROUP BY + HAVING(统计TRUE数量)

通过分组统计每个ID下TRUE的数量,只有数量为0的才是全FALSE的ID:

SELECT ID
FROM FakeTable
GROUP BY ID
HAVING COUNT(CASE WHEN Boolean = 'TRUE' THEN 1 END) = 0

原理:CASE WHEN会把TRUE的记录标记出来,COUNT只统计非NULL值,所以结果为0就说明该ID没有任何TRUE记录。

方案3:使用GROUP BY + HAVING(利用布尔值的极值)

如果你的Boolean列是真正的布尔类型(不是字符串),或者字符串比较'TRUE' > 'FALSE'成立的话,可以用极值判断:

SELECT ID
FROM FakeTable
GROUP BY ID
HAVING MAX(Boolean) = 'FALSE'

原理:如果某个ID里有TRUE,那MAX值就是TRUE;只有全是FALSE的时候,MAX值才是FALSE。

验证结果

这三个语句执行后,都会返回ID=3,完全符合你的预期需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:01