尝试从db2数据库中收集结果时发生了一件奇怪的事,我不知道原因。
查询如下:
SELECT
COUNT(*)
FROM
MYSCHEMA.TABLE1 T1
WHERE
NOT EXISTS (
SELECT
*
FROM
MYSCHEMA.TABLE2 T2
WHERE
T2.PRIMARY_KEY_PART_1 = T1.PRIMARY_KEY_PART_2
AND T2.PRIMARY_KEY_PART_2 = T1.PRIMARY_KEY_PART_2
)
这是一个非常简单的。奇怪的是,同一查询,如果将COUNT(*)更改为*,我将得到8结果,而使用COUNT(*)我将仅得到2。此过程重复了多次,奇怪的结果仍在继续。
在此示例中,TABLE2是TABLE1的父表,其中TABLE1的主键为PRIMARY_KEY_PART_1和PRIMARY_KEY_PART_2,而TABLE2的主键为PRIMARY_KEY_PART_1,PRIMARY_KEY_PART_2和PRIMARY_KEY_PART_3。它们之间没有外键(因为它们是传统的),并且它们具有大量的数据。
DB2查询来自SYSIBM.SYSVERSIONS的SELECT VERSIONNUMBER返回:
7020400
8020400
9010600
并且使用的客户端是SquirrelSQL 3.6(未标记行限制)。
那么,这个奇怪结果的解释是什么?
没有详细信息(至少包括表及其索引的准确的Db2版本和DDL),什么都可以,即使有了这些详细信息,只有IBM支持人员才能真正说出,真正的原因是什么? 。
通常看起来像是损坏的数据(例如,索引与表数据之间的差异)。
值得与IBM一起打开支持案例。