社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

将Oracle合并转换为MySQL更新

Mark Schultz • 6 年前 • 1589 次点击  

我正在尝试将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
文章 [ 1 ]  |  最新文章 6 年前
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