gpt4 book ai didi

sqlite - WHERE - NULL 在 SQLite 中不起作用吗?

转载 作者:IT王子 更新时间:2023-10-29 06:17:24 24 4
gpt4 key购买 nike

这是一个奇怪的:

我可以从 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 ,这个表达式有效——所以现在我怀疑我的 PHP 的 SQLite 有版本问题?那可能吗?这个表达式不是一直有效吗?

更新 2:

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

PHP Warning: SQL logic error or missing database

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

更新 3

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

Error: file is encrypted or is not a database

所以这里肯定有两种 SQlite 风格的冲突。 ( See this ) 不过,为什么声明无效?

更新 4

好的,我想我已经追查到问题的根源,如果不是原因的话——我用 PHP ezSQL 创建的数据库是 IS NULL 语句失败的地方。如果我使用 PHP 的 SQLite3 类创建数据库,语句工作正常,而且,我可以从 CLI 访问数据库,而 ezSQL 创建的数据库给出了 file is encrypted 错误。

所以我深入研究了 ezSQL 代码——我立即看到它使用 PDO 方法,而不是更新的 SQLite3 类。也许那是什么——我不会再浪费时间在这上面了……

无论如何,我找到了我的解决方案,即避开 ezSQL,而只使用 PHP 的 SQLite3 类。

最佳答案

a IS b and a IS NOT b 是一般形式,其中 ab 是表达式。

这通常只在a IS NULLa IS NOT NULL 情况下出现。还有 ISNULLNOTNULL(也是 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>

关于sqlite - WHERE - NULL 在 SQLite 中不起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7519621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com