Oracle SQL:使用相同 table 的子查询更新 oracle 中的多行
Oracle SQL : Update multirows in oracle using subquery of same table
我有一个table这样的
Group
Item_No
UL
MODEL
10
1
40
10
10
1
35
12
10
1
30
13
10
2
NULL
10
10
2
NULL
12
10
2
NULL
13
我想更新 UL 的值,其中 ITEM_NO 是 2 从项目编号 =1 减去 5 的 UL,其中模型相同。
所以我的输出 table 应该是这样的
Group
Item_No
UL
MODEL
10
1
40
10
10
1
35
12
10
1
30
13
10
2
35
10
10
2
30
12
10
2
25
13
我的查询如下所示:
Update table t1
set t1.Ul = ( select t2.ul-5
from table t2
where t2.item_no =1)
where t1.model in ( select model
from table t2
where t2.item_no = 1) , t1. Item_no =2
此查询 returns 错误为“单行子查询 returns 多行。”
我也尝试过使用 inner join 但无法做到。
谁能帮忙看看怎么做。
试试这个:
MERGE INTO table t1
USING table t2
ON (t1.model = t2.model AND t2.Item_No = 1)
WHEN MATCHED THEN
UPDATE SET t1.UL = t2.UL - 5, t1.Item_No = 2
我想您正在寻找以下内容:
merge into t1 x
using (select * from t1 where ITEM_NO = 1) y
on (x.M0DEL = y.M0DEL and x.ITEM_NO=2)
WHEN matched THEN
UPDATE SET x.UL=Y.UL -5;
https://livesql.oracle.com/apex/f?p=590:43:20294207843979::NO:::
update t1 tt1
set tt1.ul=(select tt2.ul from t1 tt2 where tt1.model1= tt2.model1 and
tt2.item_no=2)
where tt1.item_no=1;
我有一个table这样的
Group | Item_No | UL | MODEL |
---|---|---|---|
10 | 1 | 40 | 10 |
10 | 1 | 35 | 12 |
10 | 1 | 30 | 13 |
10 | 2 | NULL | 10 |
10 | 2 | NULL | 12 |
10 | 2 | NULL | 13 |
我想更新 UL 的值,其中 ITEM_NO 是 2 从项目编号 =1 减去 5 的 UL,其中模型相同。
所以我的输出 table 应该是这样的
Group | Item_No | UL | MODEL |
---|---|---|---|
10 | 1 | 40 | 10 |
10 | 1 | 35 | 12 |
10 | 1 | 30 | 13 |
10 | 2 | 35 | 10 |
10 | 2 | 30 | 12 |
10 | 2 | 25 | 13 |
我的查询如下所示:
Update table t1
set t1.Ul = ( select t2.ul-5
from table t2
where t2.item_no =1)
where t1.model in ( select model
from table t2
where t2.item_no = 1) , t1. Item_no =2
此查询 returns 错误为“单行子查询 returns 多行。” 我也尝试过使用 inner join 但无法做到。 谁能帮忙看看怎么做。
试试这个:
MERGE INTO table t1
USING table t2
ON (t1.model = t2.model AND t2.Item_No = 1)
WHEN MATCHED THEN
UPDATE SET t1.UL = t2.UL - 5, t1.Item_No = 2
我想您正在寻找以下内容:
merge into t1 x
using (select * from t1 where ITEM_NO = 1) y
on (x.M0DEL = y.M0DEL and x.ITEM_NO=2)
WHEN matched THEN
UPDATE SET x.UL=Y.UL -5;
https://livesql.oracle.com/apex/f?p=590:43:20294207843979::NO:::
update t1 tt1
set tt1.ul=(select tt2.ul from t1 tt2 where tt1.model1= tt2.model1 and
tt2.item_no=2)
where tt1.item_no=1;