来自COUNT查询的意外结果

Ahm*_*met 3 sql database intersystems count intersystems-cache

从一张桌子算起来时,我遇到了一个奇怪的问题.表名是Client,并且有一个名为CardNovarchar(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
Run Code Online (Sandbox Code Playgroud)

没有CardNo的客户端数量是38000.CardNo的客户端数量是78000.表中所有客户端的数量是265000,不等于78000 + 38000.这怎么可能发生?根据文档,查询样式应该没有问题 http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_null

SSH*_*SSH 5

请确保您的指数是最新的.有时人们会更改表定义并忘记构建索引,因此您最终只会在更改索引定义后插入新数据的索引.

即使您没有索引CardNo字段,也需要拥有最新的索引,因为SQL引擎可以选择通过索引全局而不是扩展("main")全局.

您可以从管理门户或终端重建索引:

do ##class(your.class.name).%BuildIndices()
Run Code Online (Sandbox Code Playgroud)