Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询根据SELECT中的列列表返回不同的结果_Sql_Oracle_Oracle12c - Fatal编程技术网

Sql 查询根据SELECT中的列列表返回不同的结果

Sql 查询根据SELECT中的列列表返回不同的结果,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我有以下看法: CREATE OR REPLACE VIEW FRM_STATAGGREGATE_VIEW AS SELECT a.id aggregate_id, SUM(S.PROD_TIME) PROD_TIME1, SUM(S.PROD_TIME) PROD_TIME2 FROM wms_aggregate a LEFT JOIN wms_stat_user s ON a.id = s.aggregate_id GROUP BY a.id; 我有以下疑问

我有以下看法:

CREATE OR REPLACE VIEW FRM_STATAGGREGATE_VIEW AS
SELECT a.id aggregate_id, 
       SUM(S.PROD_TIME) PROD_TIME1, 
       SUM(S.PROD_TIME) PROD_TIME2
FROM wms_aggregate a
LEFT JOIN wms_stat_user s
ON a.id = s.aggregate_id
GROUP BY a.id;
我有以下疑问:

SELECT prod_time1, NULL
FROM FRM_StatAggregate_VIEW
WHERE aggregate_id = 183
UNION ALL
SELECT prod_time1, prod_time2
FROM FRM_StatAggregate_VIEW
WHERE aggregate_id = 183;
查询将生成以下结果:

PROD_TIME1  PROD_TIME2
60  <NULL>
0   0
PROD_TIME1 PROD_TIME2
60
0   0
换句话说,当我在查询中包含这两列时,它们返回值为0,但当只包含一列时,返回值(60)是正确的

克隆视图中使用的表并重新创建视图时,结果是正确的


我的问题是:这是一个Oracle错误吗?或者这些结果是否可能是由于任何数据库/表/视图配置、索引等造成的?

从视图中选择*返回什么?union all'd查询的执行计划是什么样的?此外,当您将该查询拆分为单独的查询时,是否会看到相同的结果(即,选择一列是否仍然生成60,但两列都生成0?)。我猜可能是在选择两个列的查询中进行了一些查询重写,这会导致出现错误;无论数据库在幕后做什么或不做什么,它都应该产生正确的结果,否则从定义上讲它就是一个bug。除非代码与您发布的代码不完全一样(这样的事情确实会发生,而且不是很少发生)。我刚刚完成了相同的测试,在选择两个PROD_时间值时,我得到了两个值60。我使用的是11g,所以如果它是一个bug,它不会在那个版本中出现。顺便说一句,在视图中两次选择同一列似乎很奇怪。请检查执行计划。至少有一个bug与将谓词从联合下推到视图中有关。如果您在计划中看到一个
UNION ALL PUSHED谓词
,您可能会受到影响。检查MyOracleSupport以了解详细信息和修复