【发布时间】:2014-04-16 08:59:16
【问题描述】:
大家好,我在 oracle 的相关更新方面遇到了这种问题。
考虑我有一张表params。
id_s id_p value desc
-----------------------------------------------
10064 9 aaa r
10064 8 bbb t
10064 4 ccc t
10064 4 ttt y
11119 9 ddd f
11119 8 eee g
11119 4 fff b
11119 4 kkk x
所以我想更新 params 以获得以下信息
id_s id_p value desc
-----------------------------------------------
10064 9 aaa r
10064 8 bbb t
10064 4 ccc t
10064 4 ttt y
11119 9 aaa r
11119 8 bbb t
11119 4 ccc t
11119 4 ttt y
我这样写更新
update params p1
set (p1.value, p1.desc) = (
select p2.value
, p2.desc
from params p2
where p2.id_s = 10064
and p2.id_p = p1.id_p
)
where p1.id_s = 11119
;
执行返回错误'ORA01427:单行子查询返回多于一行'
我怎样才能使这个更新工作?
【问题讨论】:
-
您的查询应该没问题 - 您是否在运行子查询时将
p1.id_p替换为它的一些值? -
@collapsar 是的,我试过了。只有一个值而不是 p1.id_p 更新有效,但是当 p1.id_p 有多个值时,返回错误“ORA01427:Single-row subquery return more than one row”。
-
根据您的明确条件,您如何确定哪些主记录和从记录匹配?例如。
id_p= 4 你有 2 个! = 2 个将id_s= 10064 与id_s= 11119 的记录相关联的选项。请注意,如果相关性的选择无关紧要,则必须确保源集和目标集的基数相同。另请注意,这种不变性通常是数据模型损坏的标志。
标签: oracle sql-update correlated