[英]How to make =NULL work in SQLite?
鉴于下表:
Table: Comedians ================= Id First Middle Last --- ------- -------- ------- 1 Bob NULL Sagat 2 Jerry Kal Seinfeld
我想做以下准备好的查询:
SELECT * FROM Comedians WHERE Middle=?
为所有案件工作。 它目前不适用于我通过sqlite3_bind_null
传递NULL的情况。 我意识到实际搜索NULL值的查询使用IS NULL
,但这意味着我不能在所有情况下使用准备好的查询。 我实际上必须根据输入更改查询,这在很大程度上违背了准备好的查询的目的。 我该怎么做呢? 谢谢!
您可以使用IS
运算符而不是=
。
SELECT * FROM Comedians WHERE Middle IS ?
没有匹配= NULL
。 检查它的唯一方法是使用IS NULL
。
你可以做各种各样的事情,但直截了当的是......
WHERE
middle = ?
OR (middle IS NULL and ? IS NULL)
如果有一个你不知道的值,你可以改为......
WHERE
COALESCE(middle, '-') = COALESCE(?, '-')
但是你需要一个永远不会出现的值。 此外,它混淆了索引的使用,但OR
版本也常常很糟糕(我不知道SQLite如何处理它)。
一切都平等,我推荐第一个版本。
NULL
不是值,而是字段的属性。 而是使用
SELECT * FROM Comedians WHERE Middle IS NULL
如果你想匹配NULL上的所有内容
SELECT * FROM Comedians WHERE Middle=IfNull(?, Middle)
如果想在NULL上匹配none
SELECT * FROM Comedians WHERE Middle=IfNull(?, 'DUMMY'+Middle)
请参阅此答案: https : //stackoverflow.com/a/799406/30225
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.