我在从一张表中获取计数时遇到了一个奇怪的问题。 表名为 Client,并且有一个名为 CardNo 的 varchar(200) 列。 数据库引擎是Intersystems Cache,查询语法是SQL。
我执行下面的查询以获取拥有/不拥有 CardNo 的客户数量。但是得到如下意想不到的结果。
select count(*) from Client
where CardNo is null
--Result: 38000
select count(*) from Client
where CardNo is not null
--Result: 78000
select count(*) from Client
--Result: 265000
无CardNo的客户数为38000。 CardNo 的客户数量为 78000。 表中所有客户端的数量为 265000,不等于 78000 + 38000。怎么会这样? 根据文档,我的查询风格应该没有问题 http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_null
最佳答案
请确保您的索引是最新的。有时人们更改表定义而忘记构建索引,因此您最终只会为更改索引定义后插入的新数据创建索引。
即使您没有为 CardNo 字段编制索引,您也需要拥有最新的索引,因为 SQL 引擎可以选择遍历全局索引而不是全局范围(“主”)。
您可以从管理门户或终端重建索引:
do ##class(your.class.name).%BuildIndices()
关于sql - COUNT 查询的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968127/