使用联接的Oracle更新语句

问题描述

我需要有关此查询的帮助。它在SSMS中工作正常,但在Oracle中不工作。我该如何重写它使其在Oracle中运行?我非常感谢您的帮助。

UPDATE reservation_Daily_elements e
SET e.MARKET_CODE = 'PHEE',e.ORIGIN_OF_BOOKING = 'DESKTOP'
FROM reservation_Daily_elements e
LEFT JOIN reservation_daily_element_name dn
          ON e.resv_daily_el_seq = dn.resv_daily_el_seq
WHERE dn.RESV_NAME_ID IN ('3747957');
Commit;

解决方法

MERGE怎么样?

merge into reservation_daily_elements e
using (select dn.resv_daily_el_seq
       from reservatioin_daily_element_name dn
       where dn.resv_name_id = '3747957'
      ) x
on (e.resv_daily_el_seq = x.resv_daily_el_seq)
when matched then update set
  e.market_code = 'PHEE',e.origin_of_booking = 'DESKTOP';

如果必须为UPDATE,则

update reservation_daily_elements e set
  e.market_code = 'PHEE',e.origin_of_booking = 'DESKTOP'
where exists (select null
              from reservation_daily_element_name dn
              where dn.resv_daily_el_seq = e.resv_daily_el_seq
                and dn.resv_name = '3747957'
             );
,

顺便说一句,oracle支持可更新的内联视图,因此您可以使用简单的update (Select... From t1 join t2 on...) set...

我还看到,由于where子句中的谓词,您的“左连接”实际上是“内部连接”。