sql - COUNT 查询的意外结果

标签 sql database count intersystems-cache intersystems

我在从一张表中获取计数时遇到了一个奇怪的问题。 表名为 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

无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/

相关文章:

javax.persistence.PersistenceException : org. hibernate.exception.SQLGrammarException:无法使用 heroku PostgreSQL 执行查询

mysql重启自动int主键

java - 如何将两个 java.sql.Date s 存储到数据库表中,当它们被截断时?

c - 如何完成 "letters"功能? (链接列表)

mysql - SQL 在创建表中引用外键错误

java - Azure移动应用程序使用java查询内连接

sql - 如何在选择时根据它们的值将一列分成多列?

mysql - 获取具有特定值的记录数量,但每个唯一字段仅获取一次

mysql - 同一张表上的 INNER JOIN COUNT

php - Youtube API v3,显示单个视频的观看次数