我以后代的名义自我回答。问题是为什么这个 SQLite 查询没有达到我的预期:
SELECT is_current FROM sp_table WHERE is_current != 1 || is_current IS NULL;
它只选择 is_current 为 NULL 的行!呸。
我以后代的名义自我回答。问题是为什么这个 SQLite 查询没有达到我的预期:
SELECT is_current FROM sp_table WHERE is_current != 1 || is_current IS NULL;
它只选择 is_current 为 NULL 的行!呸。
问题在于 SQLite || 运算符不是逻辑或!这是一个字符串连接运算符。
OR 是正确的运算符。
还有,|| 比 SQLite 中的所有其他运算符具有更高的优先级,因此我的表达式甚至没有按照我认为的顺序进行评估。
正确的表达是:
SELECT is_current FROM sp_table WHERE is_current != 1 OR is_current IS NULL;
最后,值得注意的是,您不能用: 替换该表达式,SELECT is_current FROM sp_table WHERE is_current != 1
因为在 SQLite 中NULL != 1
计算结果为 false。您必须明确检查 is is_current IS NULL
。