我正在尝试更新" my_value"表格列#34; my_table"基于" a_value"列" result_table"表,使用相关更新。当我运行类似于以下的东西时:
my_table:
OrderID my_volume my_value
----------------------------
1 100 NULL
2 50 NULL
result_table:
OrderID a_value a_type
----------------------------
1 2000 BUY
2 3500 SELL
My_table(运行UPDATE查询后)应该变为:
OrderID my_volume my_value
----------------------------
1 100 2000
2 50 3500
我的更新声明:
update my_table set
my_value=
(select a_value
from result_table
join my_table on
result_table.orderID = my_table.orderID )
where orderID in
(select my_table.orderID from my_table,result_table
where
result_table.orderID = my_table.orderID);
我得到了
"单行子查询返回多行"错误。
如何更正查询,以便SELECT
语句为每个调用返回单行?
答案 0 :(得分:1)
使用就像这样简单:
update my_table v set v.my_value = ( select a_value from result_table r where r.OrderID = v.OrderID );
select * from my_table;
ORDERID MY_VOLUME MY_VALUE
------- --------- --------
1 100 2000
2 50 3500
您已经拥有唯一的OrderID
。所以,没有问题。
答案 1 :(得分:1)
最好使用MERGE
:
Merge into my_table mytab
using result_table rsltab
on (mytab.id = rsltab.id)
When matched then
update
SET mytab.my_value = rsltab.a_value;
答案 2 :(得分:1)
MERGE
解决方案可能是最好的,但只是为了记录你的UPDATE
中有一些额外的连接可能是导致错误的原因。假设result_table.orderid
是唯一的,看起来你需要的只是:
update my_table
set my_column =
( select my_value
from result_table
where result_table.orderid = my_table.orderid )
where orderid in
( select orderid
from result_table );
或result_table.orderid
是否有唯一约束/索引:
update ( select t.my_column, r.my_value
from my_table t
join result_table r on r.orderid = t.orderid )
set my_column = my_value;