单行子查询在 Oracle 中返回多于一行

Posted

技术标签:

【中文标题】单行子查询在 Oracle 中返回多于一行【英文标题】:Single - row subQuery returns more that one row in Oracle 【发布时间】:2019-05-28 11:18:29 【问题描述】:

我正在尝试在 Oracle 中编写一个将返回多行的查询,但是使用此查询我得到“单行子查询返回多于一行”,我尝试使用 IN 操作代替“=”操作员,但我做不到,这是我的查询

 Update Quote_line_part_quantity 
 SET 
 resale_am =(
select target_resale 
FROM Quote_line_part_quantity 
where quote_id=100218906
)
WHERE 
 quote_id=100218906
 AND quote_line_no IN(
 SELECT 
 quote_line_no
 FROM 
 Quote_Line
 WHERE 
quote_id IN 100218906
AND quote_line_no=(1)
AND Quote_line_status_cd IN('R','A')
);

我很困惑为什么会一次又一次地给出这个错误。请帮助

【问题讨论】:

您需要将要更新的子查询与要更新的行关联起来。一个字段只能更新一个值,不能更新多个值。然而,这意味着你不能只做update ... set resale_am = target_resale where ... 【参考方案1】:

最有可能的问题在这里:

set resale_am = (select target_resale 
                 from Quote_line_part_quantity 
                 where quote_id = 100218906
                )

目前尚不清楚解决此问题的最佳方法,但添加 and rownum = 1 将解决您当前的问题。

【讨论】:

您可能认为它挽救了您的一天,但它所做的只是清除了错误。零保证您实际上得到了预期的结果。如前所述,您尝试使用返回多个值的结果更新单个行值。现在,您必须确定这些多个值中的哪一个是正确的。结果集中没有固有的顺序,因此只需添加 'rownum = 1' 将恰好返回一个 random 行。 @EdStevens 。 . .返回的值是“随机”的。这是不确定的。 @GordonLinoff - 你促使我快速阅读“randmon”与“indeterminant”。无论人们希望以哪种方式对这个问题进行分类,最终结果都是相同的...... OP 仅使用 'where rownum = 1' 将结果限制为单个值对控制 which 行没有任何作用提供要使用的值..所以不知道它是否为操作选择了正确行。

以上是关于单行子查询在 Oracle 中返回多于一行的主要内容,如果未能解决你的问题,请参考以下文章

Oracle APEX 交互式报告中的错误 - ORA-01427:单行子查询返回多于一行

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

得到以下错误 ORA-01427: 单行子查询返回多于一行 01427. 00000 - “单行子查询返回多于一行”

子查询结果 '单行子查询结果多于一行'

单行子查询返回多于一行

返回单行子查询的更新语句返回多于一行