2
    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
      )
Matthew Flaschen
  • 268,153
  • 48
  • 509
  • 534

2 Answers2

2
INSERT INTO  
pageeditcontrol (pageid, edituser, editdate) 
VALUES  ('1585', 'admin', sysdate()) 
ON DUPLICATE KEY UPDATE 
edituser = values(edituser), 
editdate = values(editdate);
laksys
  • 3,138
  • 4
  • 26
  • 37
  • According to http://stackoverflow.com/a/548570/1563700 this does a delete and then an insert. The delete may be cascaded to foreign keys and delete triggers may be executed. This could modify your database in a way you are not expecting it –  Nov 11 '13 at 15:10
  • 1
    @mklemenz The delete and insert talked about in the answer pertains to the REPLACE statement not the INSERT INTO ON DUPLICATE KEY UPDATE – knutesten Dec 19 '13 at 13:27
1

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).

Henning
  • 15,563
  • 3
  • 50
  • 65