Py学习  »  DATABASE

将Oracle合并转换为MySQL更新

Mark Schultz • 5 年前 • 1435 次点击  

我正在尝试将oracle merge语句转换为mysql update语句。这个特殊的merge语句只做一个更新(不插入),所以不清楚以前的工程师为什么使用merge语句。

不管怎样,我知道需要将其转换为mysql,但不清楚是如何实现的。(边注,我在Java应用程序中这样做)

下面是merge语句:

MERGE INTO table1 a
 USING 
 (SELECT DISTINCT(ROWID) AS ROWID FROM table2 
 WHERE DATETIMEUTC >= TO_TIMESTAMP('
 formatter.format(dWV.getTime())
 ','YYYY-MM-DD HH24:MI:SS')) b
 ON(a.ROWID = b.ROWID and 
 a.STATE = 'WV' and a.LAST_DTE = trunc(SYSDATE)) 
 WHEN MATCHED THEN UPDATE SET a.THISIND = 'S';

我的尝试是这样的:

UPDATE table1 a
INNER JOIN table2 b ON (a.ROWID = b.ROWID 
and a.STATE = 'WV' 
and a.LAST_DTE = date(sysdate()))
SET a.THISIND = 'S'
WHERE DATETIMEUTC >= TO_TIMESTAMP('formatter.form(dWV.getTime())', 'YYYY-MM-DD HH24:MI:SS')

但是,我不清楚这是不是真的在做同样的事情?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44096
 
1435 次点击  
文章 [ 1 ]  |  最新文章 5 年前
GMB
Reply   •   1 楼
GMB    6 年前

如你所说,原始的先知 MERGE 语句只执行更新,不执行插入。

与oracle版本相比,mysql查询的一般语法看起来没有问题。以下是更新版本:

UPDATE table1 a
INNER JOIN table2 b 
    ON a.ROWID = b.ROWID 
    AND b.DATETIMEUTC >= 'formatter.form(dWV.getTime())'
SET a.THISIND = 'S'
WHERE 
    a.STATE = 'WV' 
    AND a.LAST_DTE = CURDATE()

变化:

  • 当前日期可以通过函数获取 CURDATE()

  • 'YYYY-MM-DD HH24:MI:SS' 是mysql日期的默认格式,因此不需要转换它,您可以按原样传递它(nb1:不清楚是什么 'formatter.form(dWV.getTime())' 实际上是指-nb2:如果你需要将字符串转换为日期, STR_TO_DATE 是你的朋友)

  • 表上的筛选条件 a 最好放在 WHERE 条款,而桌子上的 b 最好是属于 INNER JOIN