所以我有一张桌子:
CREATE TABLE TABLE_NAME (
COLUMN_1 char(12) NOT NULL,
COLUMN_2 char(2) NOT NULL,
COLUMN_3 char(1) NOT NULL,
COLUMN_4 int NOT NULL,
COLUMN_5 char(2) NOT NULL,
COLUMN_6 money NOT NULL,
COLUMN_7 smallint NOT NULL,
COLUMN_8 varchar(10) NOT NULL,
COLUMN_9 smallint NOT NULL,
COLUMN_10 datetime NOT NULL
Primary Key (COLUMN_1, COLUMN_2, COLUMN_3)
)
SELECT COUNT(*)
返回与 不同的值SELECT DISTINCT COUNT(*)
。这怎么可能?
我也试过
SELECT COUNT(*) FROM (
SELECT
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8,
COLUMN_9,
COLUMN_10
FROM TABLE_NAME
) TMP
它返回与不同查询相同的计数。
我看不到主键和所有字段都不是 NULL 的情况下,总计数可能与唯一记录的计数不同。
顺便说一句,这是在 Sybase ASE 15 上。
差异是 50 万条记录中的大约 100 条记录。我在其他几个表中也看到了这个问题,但只选择了一个作为示例。
编辑
为了完整起见,我应该提到我在编写一个简单的作业以将该表完全复制到远程数据库时发现了这个问题。我的应用程序正在记录一定数量的读/写操作,但由于源数据库中的记录数与目标数据库中的记录数不同,导致 QA 失败。这两个值都是通过COUNT(*)
;获得的。从目标(Oracle 10g)返回的计数与我的应用记录的读/写操作数相同。由于源表上的所有字段都定义为 NOT NULL 并且定义了主键,因此我无法解释我的应用程序如何丢失少量记录。
这是我开始使用上面列出的备用查询的时候,这两个查询都与我的应用程序读/写计数以及COUNT(*)
从目标返回的值一致。换句话说,唯一不匹配的值是COUNT(*)
源数据库上的 。