ORACLE 数据库查询 - 尝试用多个表交换行值
ORACLE Database query - trying to swap row values with multiple tables
我编写了一个查询,根据多个 table 中的条件交换同一 table 中的行值
UPDATE LV_MESSWERT a1
SET a1.WERT_N = (
SELECT mw.WERT_N
FROM LV_MPRG mp1, LV_PK pk, LV_PKL pkl, VIEW_DEF3_MESSUNG mess, LV_MESSWERT mw, LV_DLOBJ dl, OSI_OBJ ob, LV_ABBRUCH ab
WHERE (mp1.DEFMES_ID = mess.DEF_MESS_ID AND
mp1.MPRG_ID = pk.MPRG_ID AND
pk.PKL_ID = pkl.PKL_ID AND
pk.PK_ID = mw.PK_ID AND
mw.DLOBJ_ID = dl.DLOBJ_ID AND
dl.obj_id = ob.obj_id AND
mw.MW_ID = a1.MW_ID AND
mw.SP = a1.sp AND
ob.KENN = 'DUMMY1' AND
pk.pk_id = ab.pk_id (+)) AND
(mp1.POBJ_ID = :pn_pobj AND
pk.mess_merk = '1')) where a1.MW_ID in (SELECT mw.MW_ID
FROM LV_MPRG mp, LV_PK pk, LV_PKL pkl, VIEW_DEF3_MESSUNG mess, LV_MESSWERT mw, LV_DLOBJ dl, OSI_OBJ ob, LV_ABBRUCH ab
WHERE (mp.DEFMES_ID = mess.DEF_MESS_ID AND
mp.MPRG_ID = pk.MPRG_ID AND
pk.PKL_ID = pkl.PKL_ID AND
pk.PK_ID = mw.PK_ID AND
mw.DLOBJ_ID = dl.DLOBJ_ID AND
dl.obj_id = ob.obj_id AND
mw.MW_ID = a1.MW_ID AND
mw.SP = a1.sp AND
ob.KENN = 'DUMMY3' AND
pk.pk_id = ab.pk_id (+)) AND
(mp.POBJ_ID = :pn_pobj AND
pk.mess_merk = '1'));
这里的问题是它更新了值但是写了 NULL 而不是值。也许有人可以帮我解决这个问题。我错过了什么?所以我希望 DUMMY_1 中 'WERT_N' 中的所有值与 DUMMY_3 对象中的 WERT_N 交换。
您的 update
语句没有 where
子句。这意味着它将更新 LV_MESSWERT
中的每一行。如果您的子查询没有 return 值,相应的 LV_MESSWERT
行将更新为 null
.
如果只想更新子查询 return 所在的行,则需要添加 where
子句
update LV_MESSWERT a1
set a1.WERT_N = (<<your subquery>>)
where exists( <<your subquery>> )
我编写了一个查询,根据多个 table 中的条件交换同一 table 中的行值
UPDATE LV_MESSWERT a1
SET a1.WERT_N = (
SELECT mw.WERT_N
FROM LV_MPRG mp1, LV_PK pk, LV_PKL pkl, VIEW_DEF3_MESSUNG mess, LV_MESSWERT mw, LV_DLOBJ dl, OSI_OBJ ob, LV_ABBRUCH ab
WHERE (mp1.DEFMES_ID = mess.DEF_MESS_ID AND
mp1.MPRG_ID = pk.MPRG_ID AND
pk.PKL_ID = pkl.PKL_ID AND
pk.PK_ID = mw.PK_ID AND
mw.DLOBJ_ID = dl.DLOBJ_ID AND
dl.obj_id = ob.obj_id AND
mw.MW_ID = a1.MW_ID AND
mw.SP = a1.sp AND
ob.KENN = 'DUMMY1' AND
pk.pk_id = ab.pk_id (+)) AND
(mp1.POBJ_ID = :pn_pobj AND
pk.mess_merk = '1')) where a1.MW_ID in (SELECT mw.MW_ID
FROM LV_MPRG mp, LV_PK pk, LV_PKL pkl, VIEW_DEF3_MESSUNG mess, LV_MESSWERT mw, LV_DLOBJ dl, OSI_OBJ ob, LV_ABBRUCH ab
WHERE (mp.DEFMES_ID = mess.DEF_MESS_ID AND
mp.MPRG_ID = pk.MPRG_ID AND
pk.PKL_ID = pkl.PKL_ID AND
pk.PK_ID = mw.PK_ID AND
mw.DLOBJ_ID = dl.DLOBJ_ID AND
dl.obj_id = ob.obj_id AND
mw.MW_ID = a1.MW_ID AND
mw.SP = a1.sp AND
ob.KENN = 'DUMMY3' AND
pk.pk_id = ab.pk_id (+)) AND
(mp.POBJ_ID = :pn_pobj AND
pk.mess_merk = '1'));
这里的问题是它更新了值但是写了 NULL 而不是值。也许有人可以帮我解决这个问题。我错过了什么?所以我希望 DUMMY_1 中 'WERT_N' 中的所有值与 DUMMY_3 对象中的 WERT_N 交换。
您的 update
语句没有 where
子句。这意味着它将更新 LV_MESSWERT
中的每一行。如果您的子查询没有 return 值,相应的 LV_MESSWERT
行将更新为 null
.
如果只想更新子查询 return 所在的行,则需要添加 where
子句
update LV_MESSWERT a1
set a1.WERT_N = (<<your subquery>>)
where exists( <<your subquery>> )