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

SQL WHERE筛选活跃项目时仅部分行生效的问题咨询

问题原因

SQL 中 AND 运算符的优先级高于 OR,你当前编写的 WHERE 条件实际执行逻辑等价于:

(ActiveAsString = '0' AND ID 匹配筛选关键词) 
OR PartNumber 匹配筛选关键词 
OR CustomerName 匹配筛选关键词

只要 PartNumber 或者 CustomerName 符合筛选规则,无论 ActiveAsString 字段值是否为 0,对应的记录都会被返回,这就是你遇到的部分数据不受活跃状态过滤约束的原因。

解决方案

将所有关键词匹配的条件用括号包裹为一个逻辑组,再和活跃状态的过滤条件做 AND 关联即可,修正后的 SQL 如下:

SELECT 
    dbo_tblTrialTest.ID, 
    dbo_tblTrialTest.PartNumber, 
    dbo_tblTrialTest.CreationDate, 
    dbo_tblTrialTest.Init, 
    dbo_tblTrialTest.CompletionInit, 
    dbo_tblTrialTest.CustomerName, 
    dbo_tblTrialTest.CompletionDate, 
    dbo_tblTrialTest.Description, 
    dbo_tblTrialTest.ActiveAsString
FROM
    dbo_tblTrialTest
WHERE 
    dbo_tblTrialTest.ActiveAsString = TRIM("0")
    AND (
        dbo_tblTrialTest.ID LIKE '*' & [Forms]![frmTrialTestOverview]![tfFilter] & '*'
        OR dbo_tblTrialTest.PartNumber LIKE '*' & [Forms]![frmTrialTestOverview]![tfFilter] & '*'
        OR dbo_tblTrialTest.CustomerName LIKE '*' & [Forms]![frmTrialTestOverview]![tfFilter] & '*'
    );

可选优化

如果 ActiveAsString 字段存在空格、空值等异常存储情况,可以调整过滤条件规避异常:

WHERE TRIM(Nz(dbo_tblTrialTest.ActiveAsString, '1')) = '0'

Nz 函数可以将 NULL 值替换为指定的默认值,这里默认替换为已完成状态的取值'1',避免空值记录被误判为活跃项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:08