Sql 带有内部联接的Oracle Update语句

Sql 带有内部联接的Oracle Update语句,sql,oracle,sql-update,Sql,Oracle,Sql Update,我有一个需要内部联接的更新查询 但我不知道如何在Oracle查询中使用联接 任何帮助都将不胜感激 UPDATE ORDTRAN_NOM_AGG_DETAIL D JOIN FCS.ORDTRAN_NOM_AGG_HEADER H ON H.AGG_HEADER_SEQ = D.AGG_HEADER_SEQ SET CASH_VALUE = DECODE (D.MONEY_UNITS, 'U',

我有一个需要内部联接的更新查询

但我不知道如何在Oracle查询中使用联接

任何帮助都将不胜感激

UPDATE ORDTRAN_NOM_AGG_DETAIL D
            JOIN FCS.ORDTRAN_NOM_AGG_HEADER H
                  ON H.AGG_HEADER_SEQ = D.AGG_HEADER_SEQ
        SET
             CASH_VALUE = DECODE (D.MONEY_UNITS, 'U', D.UNIT_VALUE * H.PRICE, 'M', D.CASH_VALUE),
             UNIT_VALUE = DECODE (D.MONEY_UNITS, 'U', D.UNIT_VALUE, 'M', D.CASH_VALUE * H.PRICE , D.UNIT_VALUE)
        WHERE H.AGG_HEADER_SEQ = 5379 AND D.ALLOW_PRICING = 'Y';

试试这样的

UPDATE (SELECT D.MONEY_UNITS AS MU,
               D.UNIT_VALUE AS UV,
               H.PRICE AS PR,
               D.CASH_VALUE AS CH,
               H.AGG_HEADER_SEQ AS AHS,
               D.ALLOW_PRICING AS AP
          FROM ORDTRAN_NOM_AGG_DETAIL D
               JOIN FCS.ORDTRAN_NOM_AGG_HEADER H
                  ON H.AGG_HEADER_SEQ = D.AGG_HEADER_SEQ) JN
   SET JN.CH = DECODE (JN.MU,  'U', JN.UV * JN.PR,  'M', JN.CH),
       JN.UV = DECODE (JN.MU,  'U', JN.UV,  'M', JN.CH * JN.PR,  JN.UV)
 WHERE JN.AHS = 5379 AND JN.AP = 'Y';

我希望这会有所帮助。

提供的解决方案@Tony891206实际上是一种理想的解决方案,但它假设存在支持它的主键。好消息是,如果没有,Oracle将抱怨修改指定键不支持的表的列,但不会执行错误的更新

如果由于缺少主键而导致其语法不起作用,并且您无法添加主键,则此语法将起作用:

UPDATE ORDTRAN_NOM_AGG_DETAIL D
set (cash_value, unit_value) = (
  select
    DECODE (D.MONEY_UNITS, 'U', D.UNIT_VALUE * H.PRICE, 'M', D.CASH_VALUE),
    DECODE (D.MONEY_UNITS, 'U', D.UNIT_VALUE, 'M',
        D.CASH_VALUE * H.PRICE , D.UNIT_VALUE)
  from FCS.ORDTRAN_NOM_AGG_HEADER H
  where
    H.AGG_HEADER_SEQ = D.AGG_HEADER_SEQ and
    H.AGG_HEADER_SEQ = 5379
)
where
  D.ALLOW_PRICING = 'Y' and
  exists (
    select null
    from FCS.ORDTRAN_NOM_AGG_HEADER H
    where
      H.AGG_HEADER_SEQ = D.AGG_HEADER_SEQ and
      H.AGG_HEADER_SEQ = 5379
  )

如果您不是Oracle人员,您会认为我疯了,但最后的
存在
条款对于此更新工作来说确实是必要的。如果不尝试,我猜它将使用相同的值或其他不可预测和不需要的内容更新表中的每一行。

如果可以重新编写查询,我将非常感激。.“JOIN”关键字是“内部联接”(=相等联接)的缩写。您已经在D和H之间执行内部联接。您可以在“联接”之前添加“内部”一词,将得到相同的结果。不确定,但可能您必须将“ORDTRAN_NOM_AGG_DETAIL D JOIN FCS.ORDTRAN_NOM_AGG_HEADER H ON H.AGG_HEADER_SEQ=D.AGG_HEADER_SEQ”括在括号中,以防上面的SQL完全不起作用,谢谢。。我真的很感谢你的帮助谢谢。。我真的很感谢你的帮助