当前位置: 首页 > 面试题库 >

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

拓拔德馨
2023-03-14
问题内容

此查询有什么问题?

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称为 标量子查询 。可以在可以使用标量值(即单个值,例如数字或字符串)的地方使用此类子查询。

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

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

您的解决方案很简单,使用以下命令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;

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



 类似资料:
  • 问题内容: 以下查询应返回从动漫中扮演角色的人物的姓名。但我收到以下错误: Blockquote ORA-01427:单行子查询返回多个行 提前致谢! 问题答案: 代替 使用 查询中有5个条件需要更改。 UPD 另外,您的查询等同于

  • 问题内容: 桌子: 我的查询: 我收到“ MySQL子查询返回多个行”错误。 我知道此查询可以使用以下查询的解决方法: 然后使用php循环遍历结果并执行以下查询以获取和回显它: 但是我认为可能会有更好的解决方案? 问题答案: 简单的解决方法是在子查询中添加一个子句: 一个更好的选择(就性能而言)是使用联接:

  • 当“事件ID”与“用户ID”匹配时,im会尝试从我的“事件”表中选择所有数据。然而,我得到一个错误1242,子查询返回超过1行。 我理解我的子查询将返回多行,因为一个用户可以参加多个事件。那么我如何使我的查询接受多行呢?

  • 问题内容: 我正在执行此查询: 我正在尝试使其返回如下内容: 但是,我得到了错误: #1242-子查询返回的行数超过1。 我尝试将语句放置在子查询中,但是收到无效的语法错误。 问题答案: 您可以使用简单的分组方式在没有子查询的情况下进行尝试: 使用GROUP BY时,未分组的任何列都必须具有聚合子句(fe SUM或COUNT。)因此,在这种情况下,您必须对县名称,precienct.id和prec

  • 问题内容: 我有一个查询返回多行,而我想将条件设置为这些多行中的一个值的查询,所以基本上我希望子查询看起来像这样: where 返回多行。因此,如果这些行中的值为1,2,3,那么我想将id设置为1或2或3。 问题答案: 当子查询仅返回1值时可以使用。 当子查询返回的值大于1时,您将必须使用: 例如:

  • 问题内容: 我正在尝试更新列中的所有记录,以便它们以“ CD”开头,例如DCE206将变为CDE206。 我正在使用上面的更新语句,但是出现以下错误 ‘子查询返回了1个以上的值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,这是不允许的。 我可以在语句中进行任何更改以实现此目的,还是需要使用游标进行调查。 我正在使用SQL Server 2000。 问题答案: 您不可能从该代码