【问题标题】:Strange result in DB2. Divergences queriesDB2 中的奇怪结果。分歧查询
【发布时间】:2015-10-28 05:51:39
【问题描述】:

尝试从 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 查询 SELECT VERSIONNUMBER FROM SYSIBM.SYSVERSIONS 返回:

7020400
8020400
9010600

并且使用的客户端是SquirrelSQL 3.6(没有标记行数限制)。

那么,这个奇怪的结果的解释是什么?

【问题讨论】:

  • 您是否尝试过对您的查询进行解释?你指向同一个数据库吗?使用相同的工具?请显示 2 个查询和 2 个结果。
  • 当我尝试 EXPLAIN PLAN SELECTION SET QUERYNO = 13 SET QUERYTAG = 'TEST13' FOR [MY_QUERY_HERE] 我收到一个错误:所需的解释表“USER. EXPLAIN_INSTANCE" 不存在。SQLCODE=-219,SQLSTATE=42704,DRIVER=4.14.111 SQL 代码:-219,SQL 状态:42704
  • 看这里使用说明:stackoverflow.com/questions/1098814/how-do-i-use-db2-explain。您可以从 db2cmd 提示符轻松完成:db2expln -database sample -t -g -f "sql query"
  • 这看起来像是一个旧的且不受支持的 DB2 版本。在其中一个旧版本中,曾经存在导致这种不一致的缺陷。

标签: count db2 missing-data db2-luw


【解决方案1】:

如果没有详细信息(至少包括表及其索引的确切 Db2 版本和 DDL),它可以是任何东西,即使有了这些细节,只有 IBM 支持人员才能真正说出,实际情况是什么原因。

通常这看起来像是损坏的数据(例如索引与表数据的差异)。

值得向 IBM 打开支持案例。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多