将 Oracle 合并查询转换为 mysql mySQL 查询

Posted

技术标签:

【中文标题】将 Oracle 合并查询转换为 mysql mySQL 查询【英文标题】:Converting an Oracle merge query into mysql mySQL query 【发布时间】:2008-12-26 10:45:53 【问题描述】:
    MERGE INTO PAGEEDITCONTROL A
      USING (SELECT
              '1585' AS PAGEID
       ,'admin' AS EDITUSER
       ,sysdate AS EDITDATE
          FROM DUAL) B
      ON (A.PAGEID = B.PAGEID)
      WHEN MATCHED THEN
      UPDATE SET
      A.EDITUSER = B.EDITUSER
     ,A.EDITDATE = B.EDITDATE
      WHEN NOT MATCHED THEN
   INSERT  (
      A.PAGEID
     ,A.EDITUSER
     ,A.EDITDATE
      )VALUES(
      B.PAGEID
     ,B.EDITUSER
     ,B.EDITDATE
      )

【问题讨论】:

【参考方案1】:
INSERT INTO  
pageeditcontrol (pageid, edituser, editdate) 
VALUES  ('1585', 'admin', sysdate()) 
ON DUPLICATE KEY UPDATE 
edituser = values(edituser), 
editdate = values(editdate);

【讨论】:

根据***.com/a/548570/1563700,这是先删除然后再插入。删除可以级联到外键并且可以执行删除触发器。这可能会以您意想不到的方式修改您的数据库 @mklemenz 答案中谈到的删除和插入与 REPLACE 语句有关,而不是 INSERT INTO ON DUPLICATE KEY UPDATE【参考方案2】:

mysql 有一个类似的构造,它看起来不像是一个 upsert,但更像一个 insate:INSERT ... ON DUPLICATE KEY UPDATE(参见 MySQL reference manual)。

【讨论】:

以上是关于将 Oracle 合并查询转换为 mysql mySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

只是想知道如何使用合并语句将下面的查询转换为 oracle 查询?

将 Oracle 查询转换为 MySQL 查询

如何将 MySQL 查询转换为等效的 Oracle sql 查询

如何在mysql查询的更新语句中加入多个表[重复]

oracle将查询的结果值作为下一个查询的字段列。

将视图从 oracle 转换为 mysql