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>> )