繁体   English   中英

如何在SQLite中使= NULL工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM