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
)
Asked
Active
Viewed 8,439 times
2

Matthew Flaschen
- 278,309
- 50
- 514
- 539
2 Answers
2
INSERT INTO
pageeditcontrol (pageid, edituser, editdate)
VALUES ('1585', 'admin', sysdate())
ON DUPLICATE KEY UPDATE
edituser = values(edituser),
editdate = values(editdate);

laksys
- 3,228
- 4
- 27
- 38
-
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
- 16,063
- 3
- 51
- 65