MYSQL: скопировать строку в таблицу и вставить, если не существует, ОБНОВЛЕНИЕ - PullRequest
0 голосов
/ 04 марта 2020

У меня есть две таблицы, одна называется "licensesbkp", другая называется "licensesorig". Если предоставленные лицензионные ключи (от 1 до 5) находятся в таблице licensesorig, скопируйте все столбцы в licensesbkp. Поскольку я не знаю, существует ли уже строка в licensesbkp, мне нужно добавить оператор «вставьте, если не существует, еще обновите». Это то, что я пытаюсь с ON DUPLICATE KEY UPDATE.

В настоящее время я получаю MySQL Ошибка # 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')

1 Ответ

1 голос
/ 04 марта 2020

Я думаю, что часть ON DUPLICATE KEY UPDATE должна быть помещена в конце запроса без 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...