我在使用此Oracle Merge查询时遇到问题。
merge into NEW_DOCTORS NP
USING OLD_DOCTORS MD
on (MD.SSN=NP.SSN OR MD.NPI=NP.NPI OR MD.PIN=NP.PIN)
WHEN MATCHED THEN
UPDATE SET
NP.othervalues=MD.othervalues
NP.PIN/SSN/NPI=MD.PIN/SSN/NPI (**update two of these three that did not return TRUE in the above ON condition)
WHEN NOT MATCHED THEN
insert(NP.SSN,NP.NPI,NP.PIN,NP.other_values)
values(MD.SSN,MD.NPI,MD.PIN,MD.other_values)
这可能吗?谢谢!
编辑:我问,因为我在某个地方看到处于ON状态的字段无法更新。但是,我不确定作者是否只在评估真实或所有领域的领域中进行讨论。我希望有人可能对此有所了解,以及任何解决方法。
答案 0 :(得分:2)
您可以使用CASE WHEN ...
:
UPDATE SET
NP.othervalues=MD.othervalues
,NP.PIN = CASE WHEN (MD.SSN=NP.SSN OR MD.NPI=NP.NPI) THEN MD.PIN ELSE NP.PIN END
,--add here the 2 others
这意味着,当您MD.SSN=NP.SSN OR MD.NPI=NP.NPI
为真时,请使用NP.PIN
更新MD.PIN
,否则请使用相同的值NP.PIN
或者你可以做3个不同的MERGE,所以它会更具可读性。
修改强>
考虑一下,如果只在这个值不相同时更新(因为它只会加入相同的值),你可以直接用MD表值更新它们。
那样做:
NP.othervalues=MD.othervalues
,NP.PIN=MD.PIN
,NP.SSN=MD.SSN
,NP.NPI=MD.NPI
如果匹配,则更新将保持相同的值,否则它将更新值。