我有一个在MySQL中运行良好的查询,
update rpt_dev a inner join rpt_dev_temp b
on a.Interaction_UDL = b.Interaction_UDL
set a.Till_Next = datediff(b.Int_start,a.Int_start)
where a.Till_Next <= 0 and
a.Int_start not in (select max(a.Int_start) from rpt_dev_temp a);
当我在Oracle上运行时,我得到以下错误:
1)SQL命令未正确结束。
2)缺少设置关键字
答案 0 :(得分:1)
使用join更新语句在Oracle中实现有点棘手。请改用MERGE
同样如评论中所述,datediff
在Oracle中无效。所以直接减去日期。但是b.Int_start - a.Int_start
会在days
中给你带来改变。将其乘以24
或24*60
或24*60*60
,以分别在hours
,minutes
和seconds
中获得差异。
merge into rpt_dev a
using rpt_dev_temp b
on (a.Interaction_UDL = b.Interaction_UDL)
when matched then update
set a.Till_Next = (b.Int_start - a.Int_start)
where a.Till_Next <= 0 and
a.Int_start not in (select max(Int_start) from rpt_dev_temp);
注意:在运行之前备份原始数据。在您的测试数据上测试它,并且在您确定要更新正确的行之前不进行提交。
简而言之,请格外小心地运行更新/删除语句。