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

SQL查询中Deselect功能失效,请求排查原因

解决SQL查询中Deselect功能失效的问题

嘿,我来帮你捋捋这个Deselect功能不好使的问题~首先我猜你说的Deselect是指排除包含'2459'的ApprovedBy记录对吧?从你给出的两个查询来看,当前逻辑是在筛选包含'2459'的记录,要实现反向排除的话,得调整WHERE条件,还要注意一个容易踩坑的NULL值问题,这大概率是你觉得功能失效的原因。

问题分析

你当前的查询用了WHERE ApprovedBy LIKE '%2459%',这是在找包含'2459'的记录。如果想实现Deselect(排除这些记录),直接换成NOT LIKE还不够——因为COALESCE如果所有AppByENo字段都是NULL的话,ApprovedBy会返回NULL,而SQL里NULL和任何值做比较结果都是UNKNOWN,不会被NOT LIKE的条件选中,这就会导致那些没有任何审批人的记录被漏掉,看起来像是功能失效了。

修正后的查询示例

第一个查询的修正版

select top 20 * 
from ( 
    Select Rec_Num, 
           COALESCE(AppByENo6,AppByENo5,AppByENo4,AppByENo3,AppByENo2,AppByENo1) as ApprovedBy 
    FROM FO_Entry 
    INNER JOIN Employees ON FO_Entry.Hq_Code = Employees.E_HQCode
) as abc 
where ApprovedBy NOT LIKE '%2459%' 
   OR ApprovedBy IS NULL; -- 加上这个条件,确保无审批人的记录也被保留(如果需要的话)

第二个查询的修正版(补全并调整逻辑)

select top 10 * 
from ( 
    Select Rec_Num, 
           COALESCE(AppByENo6,AppByENo5,AppByENo4,AppByENo3,AppByENo2,AppByENo1) as ApprovedBy 
    FROM FO_Entry 
    INNER JOIN Employees ON FO_Entry.Hq_Code = Employees.E_HQCode
) as abc 
where ApprovedBy NOT LIKE '%2459%' 
   OR ApprovedBy IS NULL;

几个关键注意点

  • 逻辑调整:用NOT LIKE '%2459%'替代LIKE,实现排除(Deselect)的核心逻辑
  • 处理NULL值:必须加上OR ApprovedBy IS NULL,否则那些所有审批字段都是NULL的记录会被过滤掉,导致结果不符合预期
  • 列别名规范:你之前给ApprovedBy加了单引号'ApprovedBy',这在部分数据库里虽然能运行,但单引号是用来表示字符串常量的,标准写法应该用方括号[ApprovedBy]或者直接写ApprovedBy(因为别名没有空格),避免歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:55