java - 将 Oracle 合并转换为 MySQL 更新

标签 java mysql oracle merge

我正在尝试将 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')

但是,我不清楚这是否实际上在做同样的事情?

最佳答案

正如您所指出的,原始 O​​racle 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 是你的 friend )

  • a上的过滤条件最好放在WHERE子句中,而表b上的过滤条件最好放在WHERE子句中内部连接

关于java - 将 Oracle 合并转换为 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188400/

相关文章:

mysql - 如何匹配另一个表中的 ID

mysql - 更改已关闭(但未解除分配)CURSOR 的 SELECT

mysql - Oracle 插入到具有 2 个选择案例的查询中

java - 使用 JPA 以编程方式在 Oracle 中创建序列

java - Android Studio 创建一个不包括 jniLibs 的构建变体/类型?

java - Spring 启动: Handle Raised Exception from Database Trigger

java - 如何使用 JCombobox 在 java 中将月份名称转换为月份数字

php - PHP 版本升级到 7.2.10 后,CodeIgniter session 未写入数据库

mysql - 查找和替换记录 MySql 中的字符串

java - 制作多个 ListView 和项目的金字塔结构