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

多列条件筛选问题:获取BookParameter1为FN且4不为YES的BookNo

图书信息表SQL查询问题

表结构与数据

现有一张存储图书信息的表,字段包括BookNo、BookParameter、Value,数据如下:

BookNo  BookParameter  Value 
1234        1           FN
1234        2           False
1234        3           30
1234        4           YES
2222        1           FN
2222        2           True
2222        3            25
2222        4            NO
3333        1            THR
3333        2            True
3333        3            54
3333        4            YES
4444        1            FN
4444        2            TRUE
4444        3            12
4444        4            NO

需求说明

需要获取所有满足BookParameter=1且Value='FN'的BookNo,但要排除那些对应同一BookNo存在BookParameter=4且Value='YES'记录的编号,最终期望输出:

BookNo
2222
4444

错误尝试分析

你之前的两个查询之所以无效,是因为SQL条件是逐行判断的:当筛选BookParameter=1的行时,同一行不可能同时是BookParameter=4,所以后面的排除条件相当于没有生效,自然会返回所有符合BookParameter=1且Value='FN'的记录。

正确SQL实现

这里提供两种可行的写法:

方法一:子查询排除法

先找出所有符合初始条件的BookNo,再排除掉存在BookParameter=4且Value='YES'的编号:

SELECT DISTINCT BookNo
FROM 你的表名
WHERE BookParameter = 1 AND Value = 'FN'
AND BookNo NOT IN (
    SELECT BookNo
    FROM 你的表名
    WHERE BookParameter = 4 AND Value = 'YES'
)

方法二:分组聚合判断法

按BookNo分组,通过聚合函数判断该编号是否满足“有符合条件的1+FN记录,且没有4+YES记录”:

SELECT BookNo
FROM 你的表名
GROUP BY BookNo
HAVING SUM(CASE WHEN BookParameter=1 AND Value='FN' THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN BookParameter=4 AND Value='YES' THEN 1 ELSE 0 END) = 0

两种方法都能得到你需要的结果,可根据实际数据库性能选择合适的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:26:15