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; 全部回报:
更新: 我正在使用PHP – 通过我的ezSQl代码和使用PHPLiteAdmin接口 使用PHPLiteAdmin demo,这个表达式是有效的 – 所以现在我怀疑我的PHP的SQLite的版本问题?可以吗?这个表达方式是不是总是有效? 更新2: 当我使用ezSQL从PHP运行代码时,PHP警告是:
有没有办法从PHP获取更多信息?这是非常不透明和奇怪的,特别是因为CLI中的相同语句工作正常… 更新3 唯一其他可能的线索是,我用PHP创建的数据库不能被CLI读取,反之亦然。我得到:
所以这里肯定有两个SQlite口味。 (See this)仍然,为什么无效的档案?? 更新4 好的,我想我已经将问题追溯到了罪魁祸首,如果不是这个原因 – 我用PHP ezSQL创建的DB是IS NULL语句失败的那个。如果我使用PHP的SQLite3类创建数据库,该语句工作正常,此外,我可以从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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |