相关更新获得 "single-row subquery returns more than one row"
Correlated update gets "single-row subquery returns more than one row"
我正在尝试根据 "result_table" table 中的 "a_value" 列更新 table "my_table" 的 "my_value" 列,使用关联更新.当我 运行 类似于以下内容时:
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(在 运行ning 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);
我明白了
"single-row subquery returns more than one row" error.
如何更正查询,使 SELECT
语句每次调用 return 单行?
就这么简单地使用:
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
。所以,没问题。
最好使用 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;
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
有唯一的 constraint/index:
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;
我正在尝试根据 "result_table" table 中的 "a_value" 列更新 table "my_table" 的 "my_value" 列,使用关联更新.当我 运行 类似于以下内容时:
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(在 运行ning 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);
我明白了
"single-row subquery returns more than one row" error.
如何更正查询,使 SELECT
语句每次调用 return 单行?
就这么简单地使用:
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
。所以,没问题。
最好使用 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;
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
有唯一的 constraint/index:
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;