Informix SQL查询:两个相似的查询返回不同的结果

Informix SQL查询:两个相似的查询返回不同的结果,sql,database,informix,Sql,Database,Informix,我有一个Informix SQL查询,它返回一组行。对于我们正在开发的站点的新版本,它被稍微修改了一下,我们的QA注意到新版本返回了不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数 FROM、WHERE和ORDER BY子句相同,SELECT部分中的列名不影响结果。只是字段的数量造成了问题 有什么想法吗?添加-->+ORDEREDjoin order指令修复了这个问题,它允许您每次都以可预测的顺序获得结果 这些链接指向指令如何工作的说明 使用ORDERED join ord

我有一个Informix SQL查询,它返回一组行。对于我们正在开发的站点的新版本,它被稍微修改了一下,我们的QA注意到新版本返回了不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数

FROM、WHERE和ORDER BY子句相同,SELECT部分中的列名不影响结果。只是字段的数量造成了问题

有什么想法吗?

添加
-->+ORDERED
join order指令修复了这个问题,它允许您每次都以可预测的顺序获得结果

这些链接指向指令如何工作的说明

使用ORDERED join order指令 强制优化器连接表的步骤 或按顺序排列的视图 出现在的FROM子句中 询问


InformixSQL引擎根据我们要检索的列使用表上的索引。检索不同的列时,我们使用不同的索引,因此得到的结果顺序不同。

我认为“字段”是指输出数据的行数?根据我的经验,人们使用“字段”和“列”作为同义词。假设select列表中的名称没有更改,您可能只得到返回的行数的差异

给定相同的表、输入数据和查询,无论查询计划或服务器版本如何,结果集的大小和内容都应该相同。结果集的顺序可以不同,除非对结果施加顺序,但这在任何DBMS中都是合法的

如果您得到不同大小的结果集,您可能应该联系IBM技术支持。至少有一个结果集是错误的,错误的结果总是很严重的


虽然提示可能有助于提高性能,而“运行更新统计信息(使用适当的选项集)”的标准建议通常也会有所帮助,但当基础数据稳定时,索引的存在或不存在都不应改变结果集。(如果数据发生变化,则会有各种各样的问题和复杂情况需要担心。)

对此,我只能想到两种解释:

  • 正在使用聚合函数,如COUNT(DISTINCT column)或
  • 要选择的其他列来自外部联接的表

  • 我知道您不希望发布SQL和表定义,但这确实使诊断变得困难。

    我认为要真正提供帮助,我们需要查看SQL、表结构、,还有一些示例内容?@toolkit:我完全理解你的观点,但坦率地说,我相信SQL在这里并没有那么重要-正如我所说的,查询很大,但没有什么可写的。此类问题所需的标准信息包括您使用的ID版本和运行的平台信息技术版本应分为三个部分,如11.50.FC1。这三个部分都很重要。
    SELECT --+ ORDERED
       name, title, salary, dname
    FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto' 
       AND emp.dno = dept.dno 
       AND emp.job= job.job;