微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WHERE – IS NULL在SQLite中不起作用?

这是一个奇怪的:

我可以从sqlite过滤NOT NULLS,但不能NULLS:

这工作:

SELECT * FROM project WHERE parent_id NOT NULL;

这些不:

SELECT * FROM project WHERE parent_id IS NULL; 
SELECT * FROM project WHERE parent_id ISNULL; 
SELECT * FROM project WHERE parent_id NULL;

全部回报:

There is a problem with the Syntax of your query (Query was not
executed) …

更新:

我正在使用PHP – 通过我的ezsql代码和使用PHPLiteAdmin接口

使用PHPLiteAdmin demo,这个表达式是有效的 – 所以现在我怀疑我的PHPsqlite的版本问题?可以吗?这个表达方式是不是总是有效?

更新2:

当我使用ezsqlPHP运行代码时,PHP警告是:

PHP Warning: sql logic error or missing database

有没有办法从PHP获取更多信息?这是非常不透明和奇怪的,特别是因为CLI中的相同语句工作正常…

更新3

唯一其他可能的线索是,我用PHP创建的数据库不能被CLI读取,反之亦然。我得到:

Error: file is encrypted or is not a database

所以这里肯定有两个sqlite口味。 (See this)仍然,为什么无效的档案??

更新4

好的,我想我已经将问题追溯到了罪魁祸首,如果不是这个原因 – 我用PHP ezsql创建的DB是IS NULL语句失败的那个。如果我使用PHPsqlite3类创建数据库,该语句工作正常,此外,我可以从CLI访问数据库,而ezsql创建的DB给出的文件是加密的错误

所以我做了一些挖掘ezsql代码关闭蝙蝠我看到它使用PDO方法,而不是较新的sqlite3类。也许这是东西 – 我不会浪费更多时间

在任何情况下,我找到了我的解决方案,这是为了避开ezsql,只使用PHP sqlite3类。

一个IS b和一个IS NOT b是一般形式,其中a和b是表达式。

这通常只能在IS NULL和IS NOT NULL情况下看到。还有ISNULL和NOTNULL(NOT NOT NULL)运算符分别是前一个表达式的短手(它们只接收一个操作数)。

sqlite表达式中的sql被理解为SQLite Query Language: Expressions

确保(上一个)语句已被终止;首先如果使用CLI。

这些都是有效的否定“空匹配”:

expr NOT NULL
expr NOTNULL
expr IS NOT NULL

这些都适用于“匹配null”:

expr ISNULL
expr IS NULL

由于所有上述结构本身都是表达式,否则也是有效的(例如NOT(expr NOT NULL)等价于expr IS NULL)。

快乐编码。

布丁的证明:

sqlite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter sql statements terminated with a ";"
sqlite> create table x (y int null);
sqlite> select * from x where y isnull;
sqlite> select * from x where y notnull;
sqlite> select * from x where y not null;
sqlite> select * from x where y is null;
sqlite> select * from x where y is not null;
sqlite>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐