【问题标题】:Is there a way to convert this query into Oracle query using merge statement?有没有办法使用合并语句将此查询转换为 Oracle 查询?
【发布时间】:2020-10-22 05:39:39
【问题描述】:
Update
vtnhmashaupl as UPL
inner join
vtsmvaccounts vacc
on vaccines. Vaiban = upl.vaiban
Inner join
vtsmvaccfmrmap as vfmr
on vacc.vaibanid = vfmr.vaibanid
and vfmr.fmrcode = upl.fmrcode
inner join
vtnhmbudget bd
on bd.hloccode = vacc.vacustidnt
inner join
vtnhmbudgetdtls dtls
on dtls.fmrcode = upl.fmrcode
and ifnull (Dtls.fnyear, bd.fnyear) = in_fnyear
set
upl.buddtlsid = dtls.buddtlsid, upl.budid = dtls.budid, upl.hloccode = bd.hloccode;
【问题讨论】:
标签:
mysql
sql
database
oracle
【解决方案1】:
我认为这符合您的期望。如果没有表结构和示例输入数据,我无法对其进行测试。
merge into vtnhmashaupl upl
using ( select vacc.vaiban
, vfmr.fmrcode
, dtls.buddtlsid
, dtls.budid
, bd.hloccode
from vtsmvaccounts vacc
inner join vtsmvaccfmrmap as vfmr
on vacc.vaibanid = vfmr.vaibanid
inner join vtnhmbudget bd
on bd.hloccode = vacc.vacustidnt
inner join vtnhmbudgetdtls dtls
on dtls.fmrcode = vfmr.fmrcode
and nvl (dtls.fnyear, bd.fnyear) = in_fnyear
) sq
on ( sq.vaiban = upl.vaiban
and sq.fmrcode = upl.fmrcode )
when matched then
update
set upl.buddtlsid = sq.buddtlsid
, upl.budid = sq.budid
, upl.hloccode = sq.hloccode;