0

我们的 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' 
4

2 回答 2

0

Mira a ver esto de agrupar por la columna del agregado, no parece correcto (SELECT DISTINCT MAX(c1) c1 , c2, c3, c4, c5,c6 FROM s1.t1 WHERE c2='NY' AND c7<'2' AND c8='Y' **

按c1分组

**

于 2021-02-19T14:18:44.420 回答
0

您不需要按与聚合函数一起使用的列进行分组。因此,将您的最后一个查询更改为 -

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
于 2021-02-19T22:32:38.933 回答