问题描述
我需要有关此查询的帮助。它在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子句中的谓词,您的“左连接”实际上是“内部连接”。