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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/393679/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 17:37:44  来源:igfitidea点击:

Converting an Oracle merge query into mysql mySQL query

sqlmysqloracle

提问by

    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
      )

回答by Henning

MySQL has a similar construct which looks less like an upsert, but more like an insate: INSERT ... ON DUPLICATE KEY UPDATE(see the MySQL reference manual).

MySQL 有一个类似的结构,它看起来不像 upsert,而更像是一个 insate:(INSERT ... ON DUPLICATE KEY UPDATE参见MySQL 参考手册)。

回答by laksys

INSERT INTO  
pageeditcontrol (pageid, edituser, editdate) 
VALUES  ('1585', 'admin', sysdate()) 
ON DUPLICATE KEY UPDATE 
edituser = values(edituser), 
editdate = values(editdate);