错误(单行子查询返回多行)

时间:2019-09-09 09:06:45

标签: sql oracle

此查询出了什么问题?

select en.*,
       (select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;

我有错误

  

ORA-01427:单行子查询返回多个行
  01427. 00000-“单行子查询返回多个行”

1 个答案:

答案 0 :(得分:2)

这是您的查询:

select en.*,
       (select sf.red, sf.blue, sf.green, sf.yellow from data2 sf )
from data1 en;

select中这样使用的子查询称为标量子查询。可以在可以使用标量值(即数字或字符串之类的单个值)的地方使用这种子查询。

标量子查询必须满足两个条件:

  • 它最多返回一行。
  • 它返回一列。

您使用LEFT JOIN的解决方案很简单:

select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join
     data2 sf
     on 1=1;

或者,在Oracle 12C中,您可以使用横向联接:

select en.*, sf.red, sf.blue, sf.green, sf.yellow 
from data1 en left join lateral
     data2 sf
     on 1=1;

在这种情况下,两者看起来相同,但是横向联接也可以用于相关子查询。