可能是SQL的三值逻辑,而不是文件中的记录消失。对SQLite的标量NOT IN表达式,若右侧是非空集合、其中确有SQL NULL,并且左边的非NULL值没有匹配项,结果可以是NULL,而不是“真”。放在WHERE条件中时,这个结果不会按真值把对应行选出来。

适用条件必须同时核清:这里的NULL是数据库空值,不能把空字符串、数字零、界面空白或文字“NULL”都当作它。观察时先由维护者查看真实表达式、左右操作数的类型和去敏样本,区分原表确无记录与条件未选中。查询结果为空,仅说明这次查询没有返回行,不能单独证明名单包含所有值,更不能证明库文件损坏或数据被删除。
边界不同,结果也不同。如果左值确实命中非空右集合,NOT IN结果为假;如果右侧为空集合,SQLite的NOT IN结果为真,即使左边是NULL也如此。因此不能概括成“只要名单里有NULL,所有情况下都查不出记录”。是否需要把空值排除在名单之外,或让它代表特殊业务状态,应先确认业务规则,不能为得到看似正常的结果随意改数据。
风险在于把空结果当成数据丢失,直接删除原表里的空值、批量填零,或重建本来可用的库。不同改写方式对左侧空值、空集合和重复项的处理可能不同,NOT EXISTS也不能脱离条件一概视作NOT IN的等价替代。应先保留原库和原查询,由维护者在无敏感副本验证边界,不在生产库执行试探性批量更新。
下一步把表达式、是否有真实SQL NULL、预期业务筛选规则和实际返回情况列清,再决定是否修改查询。成都武侯区台式电脑用户可拨400-877-9605,只提供软件版本和去敏表达式现象,核实第三方电脑侧协助范围,不交客户数据库与凭据。电脑快修网提供信息展示与第三方维修对接,具体安排须确认,启用台账不等于已受理这项数据库维护。