ACCESS/SQL查询NOT LIKE运算符失效,无法排除含"Not Issue"的注释
Access 注释过滤逻辑失效问题修正
问题现象对应根因
- 通配符适配错误:Access 数据库的模糊匹配规则与标准SQL不一致,默认使用
*作为任意长度字符的通配符、?匹配单个字符,而非其他数据库通用的%。原代码写的"%not issue%"不会被识别为模糊匹配模式,仅能匹配内容完全等于%not issue%字符串的记录,无法识别嵌在注释文本中间的「Not Issue」内容,自然漏过滤了大量不符合要求的行。 - 逻辑嵌套反向:原过滤条件
Not (计算后的注释 <> "%not issue%")为双重否定,等价于“仅保留计算后注释完全等于%not issue%的记录”,与“排除含Not Issue文本的记录”的目标完全相反。 - 缺失表关联:原WHERE条件引用了
[Dup Vin Comments_085].[Dup Ind]字段,但FROM子句仅加载了[Comments_001]表,未建立两表的关联关系。Access遇到跨表无关联的字段引用时,会触发隐式笛卡尔积逻辑,随机丢弃部分匹配行,这也是添加过滤条件后总结果数直接从100条降到50条的核心原因。
修正后可运行SQL
INSERT INTO Combined_Comments ( [ID], [Comment] ) SELECT c.[ID], IIf(c.[Comments] <> " ", "BR #" & c.[Branch Number] & " - " & c.[Comments], c.[Comments]) AS [Dup Comment] FROM [Comments_001] c -- 补全缺失的表关联,关联字段可根据实际业务逻辑调整(示例以ID为关联键) INNER JOIN [Dup Vin Comments_085] v ON c.[ID] = v.[ID] WHERE -- 排除注释包含"Not Issue"的记录,使用Access原生通配符,NOT LIKE实现正向排除 IIf(c.[Comments] <> " ", "BR #" & c.[Branch Number] & " - " & c.[Comments], c.[Comments]) NOT LIKE "*not issue*" -- 保留原有非空Dup Ind的过滤规则 AND v.[Dup Ind] <> " ";
实操注意事项
- Access的
LIKE匹配默认不区分大小写,无需额外处理「not issue」「Not Issue」「NOT ISSUE」的大小写差异。 - 编写排除类过滤逻辑时,优先直接用
计算字段 NOT LIKE "*目标文本*"实现,避免多层Not嵌套导致的逻辑反向问题。 - 若业务逻辑不需要关联
[Dup Vin Comments_085]表,可直接删除WHERE中对应的跨表过滤条件,从根源避免无关联查询导致的结果随机缺失。
内容的提问来源于stack exchange,提问作者Eyan
相关产品推荐
相关产品推荐

