【问题标题】:Oracle Single row subquery returns multiple rows while using nested subqueryOracle 单行子查询在使用嵌套子查询时返回多行
【发布时间】:2015-07-14 12:33:17
【问题描述】:

我正在尝试运行如下查询,但它会引发“单行子查询返回多行”错误。它可以使用 = 代替 (返回超过 50 行作为最终输出)。当我使用 时无法弄清楚出了什么问题。试过 NOT IN,不起作用。请帮忙。

select a,
       b,
       c,
       d,
       e 
from 
   (select distinct column1 as a,
                    column2 as b,
                    column3 as c,
                    column4 as d,
                    column5 as e
     from t1
     where t1.column1 like 'DOMAIN.%')
where c||d||e <> 'YYY'

【问题讨论】:

  • 我在这里没有看到任何单行子查询。
  • t1 是不是一个复杂的视图?
  • @mustaccio 没错,我也不是:|
  • @AlexPoole 不,它是一个表,a,b,c,d,e 是根据列上的复杂函数检索的。猜猜这不重要。会不会是数据问题?
  • 异常是来自查询本身还是来自其中一个函数 - 您可以添加错误堆栈,尤其是如果它指示 PL/SQL 错误?有一些与此错误相关的错误(请参阅 MOS 说明 18832.1 以获取列表);没有什么明显相关的,但你隐藏了很多细节。

标签: oracle ora-01427


【解决方案1】:

这只是一种预感,但我认为您在此处的查询中缺少内联视图别名,如下所示

from 
   (select distinct column1 as a,
                    column2 as b,
                    column3 as c,
                    column4 as d,
                    column5 as e
     from t1
     where t1.column1 like 'DOMAIN.%') XXX <-- this one

另外,请尝试使用CONCAT() 函数代替

where concat(concat(c,d),e) <> 'YYY'

【讨论】:

  • concat() 不像你认为的那样工作——它只接受两个参数as per the documentation。您必须嵌套 concat() 调用才能将 3 个或更多项目连接在一起。恕我直言,使用|| 连接项目的方法更具可读性。
  • @Boneist,是的,这是真的。编辑答案。实际上这是一种预感,但 concat 运算符也应该可以工作。不过值得一试。
  • 我不是在质疑 concat(如果使用得当)是否会起作用;这是可读性的问题。我发现c||d||econcat(concat(c,d),e) 更容易阅读和理解!最近有人在一个问题中使用了 concat,我必须应用适当的缩进等来弄清楚他们在做什么!当然是 YMMV,但我完全赞成让代码易于阅读和维护! *{:-)
  • 大家好,感谢您的意见。我找到了错误的原因 - 这是由于用于获取我认为无害的 column3 的子查询。它获取了超过 1 行并且无法放入“c”中。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多