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

SQLite使用NOT GLOB仍返回需排除字符串的问题求助

SQLite更新查询排除指定记录问题

我需要在SQLite中执行列更新操作:当title字段包含指定字符串时更新对应列,但要排除匹配特定字符串的记录。注意SQLite不允许在UPDATE关联的查询中使用EXCEPT语句(单独使用SELECT时EXCEPT可以正常工作)。目前我注释了UPDATE语句来测试SELECT部分,但查询仍然返回了包含“Shovel Test”的记录,而这正是我想要排除的内容。测试的SQL语句如下:

SELECT * FROM  AUDIT_INVENTORY_20250307
--UPDATE AUDIT_INVENTORY_20250307
--SET NAMING_CONVENTION = 'Persistent draft, test or training items older than 60 days'
WHERE 
LOWER(title) GLOB LOWER('*Test*')
OR LOWER(title) GLOB LOWER('*Testing*') 
OR LOWER(title) GLOB LOWER('*Delete*')
OR LOWER(title) GLOB LOWER('*Untitled*')
OR LOWER(title) GLOB LOWER('*Draft*')   
OR LOWER(title) GLOB LOWER('*Training*') 
AND LOWER(title) NOT GLOB LOWER('*Shovel Test*') 
AND created > '2025/01/07'

问题原因

逻辑运算符优先级问题:AND的优先级高于OR,导致你的排除条件LOWER(title) NOT GLOB LOWER('*Shovel Test*')仅与最后一个OR条件LOWER(title) GLOB LOWER('*Training*')绑定,其他OR条件(比如匹配*Test*的记录)不会受到排除约束,所以包含“Shovel Test”的记录因为匹配了*Test*就被筛选出来了。

修正后的SQL语句

把所有需要匹配的OR条件用括号包裹,形成一个整体条件,再与排除条件、日期条件用AND连接:

-- 先测试SELECT验证结果
SELECT * FROM  AUDIT_INVENTORY_20250307
WHERE 
(
LOWER(title) GLOB LOWER('*Test*')
OR LOWER(title) GLOB LOWER('*Testing*') 
OR LOWER(title) GLOB LOWER('*Delete*')
OR LOWER(title) GLOB LOWER('*Untitled*')
OR LOWER(title) GLOB LOWER('*Draft*')   
OR LOWER(title) GLOB LOWER('*Training*')
)
AND LOWER(title) NOT GLOB LOWER('*Shovel Test*') 
AND created > '2025/01/07';

-- 确认结果正确后执行UPDATE
UPDATE AUDIT_INVENTORY_20250307
SET NAMING_CONVENTION = 'Persistent draft, test or training items older than 60 days'
WHERE 
(
LOWER(title) GLOB LOWER('*Test*')
OR LOWER(title) GLOB LOWER('*Testing*') 
OR LOWER(title) GLOB LOWER('*Delete*')
OR LOWER(title) GLOB LOWER('*Untitled*')
OR LOWER(title) GLOB LOWER('*Draft*')   
OR LOWER(title) GLOB LOWER('*Training*')
)
AND LOWER(title) NOT GLOB LOWER('*Shovel Test*') 
AND created > '2025/01/07';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:02:37