内联视图中的 ORA-1427
Posted
技术标签:
【中文标题】内联视图中的 ORA-1427【英文标题】:ORA-1427 in inline view 【发布时间】:2021-02-19 14:06:57 【问题描述】:我们的 Prod 环境中有一个查询失败,该查询因 ora-01427 单行子查询返回更多行而失败。 这是oracle 11g 数据库。如下查询。此查询运行良好,直到我们使用 SQ3 添加最终的左外连接,一旦添加它会在一段时间后失败并出现 ORA-1427。
select c1,c2..c8 from
t1 left join
(subquery with joins)SQ1
left join
(subquery with joins)SQ2
left join
(subquery with joins)SQ4
left join
(subquery with joins)SQ5
left join
(SELECT DISTINCT MAX(c1) c1, c2, c3, c4, c5,c6
FROM s1.t1 WHERE c2='NY' AND c7<'2' AND c8='Y'
GROUP BY c1, c2, c3, c4, c5,c6) SQ3 ON sq3.c3=t1.c3
AND sq3.c8=t1.c8
AND sq3.c7=t2.c6
AND sq3.c6 <'2'
AND sq3.c4='Y'
当我使用 WITH 子句重写此查询时,它运行良好,见下文。关于为什么第一个查询在下面的第二个查询没有更改逻辑的情况下执行失败的任何想法。
with
(SELECT DISTINCT MAX(c1) c1, c2, c3, c4, c5,c6
FROM s1.t1 WHERE c2='NY' AND c7<'2' AND c8='Y'
GROUP BY c1, c2, c3, c4, c5,c6) as SQ3
select c1,c2..c8 from
t1 left join
(subquery with joins)SQ1
left join
(subquery with joins)SQ2
left join
(subquery with joins)SQ4
left join
(subquery with joins)SQ5
left join
SQ3 ON sq3.c3=t1.c3
AND sq3.c8=t1.c8
AND sq3.c7=t2.c6
AND sq3.c6 <'2'
AND sq3.c4='Y'
【问题讨论】:
出于兴趣,您在group by
子句中包含c1
是您的示例sql 语句中的错误吗?如果该列在 group by 子句中,则对该列执行聚合函数没有多大意义...
@boneist 是的。不知道为什么要开发。是这样写的。似乎没有必要。
【参考方案1】:
Mira a ver esto de agrupar por la columna del agregado, no parece Correcto (SELECT DISTINCT MAX(c1) c1, c2, c3, c4, c5,c6 从 s1.t1 哪里 c2='NY' AND c7
按c1
分组**
【讨论】:
请编辑您的答案(格式化答案并用英文书写)。谢谢。 是的,我试过这个选项,但错误仍然存在。【参考方案2】:您不需要按与聚合函数一起使用的列进行分组。因此,将您的最后一个查询更改为 -
SELECT MAX(c1) c1, c2, c3, c4, c5,c6
FROM s1.t1
WHERE c2 = 'NY'
AND c7 < '2'
AND c8 = 'Y'
GROUP BY c2, c3, c4, c5,c6
【讨论】:
你认为这能解决问题吗?反正我会试试的。以上是关于内联视图中的 ORA-1427的主要内容,如果未能解决你的问题,请参考以下文章
根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427