单行子查询在 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:单行子查询返回多于一行