错误(单行子查询返回多于一行) [英] Error (single-row subquery returns more than one row)

查看:71
本文介绍了错误(单行子查询返回多于一行)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个查询有什么问题?

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

我有错误

ORA-01427:单行子查询返回多于一行
01427. 00000 - 单行子查询返回多于一行"

ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"

推荐答案

这是您的查询:

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.

这篇关于错误(单行子查询返回多于一行)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆