【问题标题】:Same Queries returning different results in 2 different Oracle databases of same version相同查询在相同版本的 2 个不同 Oracle 数据库中返回不同结果
【发布时间】:2017-11-08 00:33:32
【问题描述】:

表创建

CREATE TABLE demo
( 
  id number(10) NOT NULL,
  ct number(10) ,
  CONSTRAINT id_pk PRIMARY KEY (id)
);

行插入

insert into demo(id,ct) values(1,4);

insert into demo(id,ct) values(2,2);

insert into demo(id,ct) values(3,3);

insert into demo(id,ct) values(4,2);

select * from demo

select q2.id,q2.ct from (
 select a1.id id,(SELECT sum(ct) from demo a2 
 where a2.id = a1.id) ct 
 from demo a1 ) q2 
group by q2.id

上述查询在一个数据库中失败

ORA-00979:不是 GROUP BY 表达式 00979. 00000 - “不是 GROUP BY 表达式” *原因:
*操作:行错误:1 列:14

在另一个数据库中,它返回带有计数的结果

数据库版本:11.2.0.4.0

两个数据库都在同一版本上运行。以下查询的结果在两个数据库中是相同的

SELECT * FROM PRODUCT_COMPONENT_VERSION;

【问题讨论】:

    标签: database oracle11g


    【解决方案1】:

    Group by 只能与组函数(sum、count、avg 等)一起使用。 旧的数据库引擎过去接受 group by 作为 order by 的意思,这是不正确的用法。

    “group by”除了“order by”之外并没有真正的意义

    【讨论】:

    • 在 Oracle 11g 上执行相同的查询,但两个数据库的结果不同。我想知道是什么导致查询显示不同的行为,即使版本相同。除了产品版本,我应该检查哪些条目?
    【解决方案2】:

    查询错误。您需要在 q2.ct 上应用聚合函数(例如 sum(q2.ct))或将其包含在 group by 子句中。

    【讨论】:

    • 查询正在同一操作系统的其他数据库上运行。不确定我是否需要检查其中安装的任何补丁。
    • 您在寻找 oracle 上的错误吗?如果没有,只需修复查询并继续。固定查询应该适用于任何版本。但是如果你正在寻找错误,我无法帮助你,因为我没有那些特定的版本。 =[
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多