本文介绍了错误(单行子查询返回多于一行)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这个查询有什么问题?
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
我有错误
ORA-01427:单行子查询返回多于一行
01427. 00000 - 单行子查询返回多于一行"
推荐答案
这是您的查询:
select en.*,
(select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;
像这样使用的select
中的子查询称为标量子查询.在可以使用标量值(即单个值,如数字或字符串)的情况下,可以使用此类子查询.
A subquery in the select
used like this is called a scalar subquery. Such a subquery can be used where a scalar value (i.e. single value such as a number or string) can be used.
标量子查询必须满足两个条件:
Scalar subqueries must meet two conditions:
- 它最多返回一行.
- 它返回一列.
您的情况的解决方案很简单,使用 LEFT JOIN
:
The solution in your case is simple, using a LEFT JOIN
:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join
data2 sf
on 1=1;
或者,在 Oracle 12C 中,您可以使用横向连接:
Or, in Oracle 12C, you can use a lateral join:
select en.*, sf.red, sf.blue, sf.green, sf.yellow
from data1 en left join lateral
data2 sf
on 1=1;
在这种情况下,两者看起来相同,但横向连接也可用于相关子查询.
The two look the same in this case, but a lateral join can also be used for a correlated subquery.
这篇关于错误(单行子查询返回多于一行)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!