MYSQL: Copy row in table and INSERT if not exist else UPDATE

Daniel :

I have two tables, one is called "licensesbkp", the other one is called "licensesorig". If the provided license keys (1 to 5) are found in table licensesorig, then copy all columns into licensesbkp. As I dont know if the row in licensesbkp is already existend, I need on top of that a "insert if not exist, else update" statement. This is what I try with ON DUPLICATE KEY UPDATE.

Currently I get the MySQL Error #1064.

INSERT INTO licensesbkp 
(uid, order_id, product_id, license_key, hash, expires_at, valid_for, source, status,
times_activated, times_activated_max, created_at, created_by, updated_at, updated_by) 
SELECT '1234567', order_id, product_id, license_key, hash, expires_at, valid_for, source, status, times_activated, 
times_activated_max, created_at, created_by, updated_at, updated_by 
FROM licensesorig 
ON DUPLICATE KEY UPDATE licensesbkp, licensesorig SET licensesbkp.order_id = licensesorig.order_id, 
licensesbkp.product_id = licensesorig.product_id, licensesbkp.license_key = licensesorig.license_key, 
licensesbkp.hash = licensesorig.hash, licensesbkp.expires_at = licensesorig.expires_at, 
licensesbkp.valid_for = licensesorig.valid_for, licensesbkp.source = licensesorig.source, 
licensesbkp.status = licensesorig.status, licensesbkp.times_activated = licensesorig.times_activated, 
licensesbkp.times_activated_max = licensesorig.times_activated_max, licensesbkp.created_at = 
licensesorig.created_at, licensesbkp.created_by = licensesorig.created_by, licensesbkp.updated_at = 
licensesorig.updated_at, licensesbkp.updated_by = licensesorig.updated_by 
WHERE licensesorig.license_key 
IN ('licensekey1', 'licensekey2', 'licensekey3', 'licensekey4', 'licensekey5')
Laurent Choulette :

I think the ON DUPLICATE KEY UPDATE part must be placed at the end of the query without the licensesbkp, licensesorig SET part:

INSERT INTO licensesbkp 
(uid, order_id, product_id, license_key, hash, expires_at, valid_for, source, status,
times_activated, times_activated_max, created_at, created_by, updated_at, updated_by) 
SELECT '1234567', order_id, product_id, license_key, hash, expires_at, valid_for, source, status, times_activated, 
times_activated_max, created_at, created_by, updated_at, updated_by 
FROM licensesorig 
WHERE licensesorig.license_key 
IN ('licensekey1', 'licensekey2', 'licensekey3', 'licensekey4', 'licensekey5')
ON DUPLICATE KEY UPDATE licensesbkp.order_id = licensesorig.order_id, 
licensesbkp.product_id = licensesorig.product_id, licensesbkp.license_key = licensesorig.license_key, 
licensesbkp.hash = licensesorig.hash, licensesbkp.expires_at = licensesorig.expires_at, 
licensesbkp.valid_for = licensesorig.valid_for, licensesbkp.source = licensesorig.source, 
licensesbkp.status = licensesorig.status, licensesbkp.times_activated = licensesorig.times_activated, 
licensesbkp.times_activated_max = licensesorig.times_activated_max, licensesbkp.created_at = 
licensesorig.created_at, licensesbkp.created_by = licensesorig.created_by, licensesbkp.updated_at = 
licensesorig.updated_at, licensesbkp.updated_by = licensesorig.updated_by 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=25717&siteId=1