今天我面临一个非常奇怪的问题,我没有运气。在我们的一个程序中,我遇到了这个问题:
select count(*) into b_count
from (
select col1, col2, col3
from table_name
where col_id = b_id and col3 = b_col3
group by col1, col2);
我们不要谈论我们可以在不使用子查询的情况下重写的这个糟糕的查询。
这里的问题出在我们的开发数据库中,oracle没有提出ORA-00979 not a GROUP BY expression
我们可以正常运行程序(没有控制,否则没有,......)。在我们的真实数据库中它确实引起了错误。
以前有人见过这个吗?有人可以向我解释一下吗?
在尝试重现问题时,我编写了这个查询,它在我们的开发数据库中运行正常(结果计数(*)= 2而不是3),在我们的实际数据库中是错误00979:
WITH table_name AS
(
SELECT 1 col1, 2 col2, 3 col3 FROM DUAL UNION ALL
SELECT 1, 3, 4 FROM DUAL UNION ALL
SELECT 2, 7, 8 FROM DUAL
)
SELECT COUNT(*)
FROM (
SELECT col1, col2, col3
FROM table_name
GROUP BY col1
);
P / S:我们的开发数据库:
Oracle Database 11g企业版11.2.0.1.0版 - 64位生产
我们的真实数据库:
Oracle Database 11g企业版11.2.0.3.0版 - 64位生产
11.2.0.1.0的查询优化器是否更智能"在子查询中省略了SELECT语句,只在主查询中使用SELECT COUNT(*)?或者它是Oracle中的一些我不知道的设置?
这是dev db中的查询计划,它似乎与SELECT SUM(col3) FROM (SELECT col1, MAX(col3) col3 FROM table_name GROUP BY col1)
之类的正在运行的查询没有什么不同