ON DUPLICATE многократное обновление

Я пытаюсь создать запрос, который будет добавлять / обновлять несколько строк одновременно, и я пытаюсь убедиться, что он правильно обрабатывает дубликаты ключей, обновляя все значения, кроме закрытого ключа, который в моем случае будет a.id

INSERT INTO products a (a.id, a.price, a.condition, a.link, a.price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), ('t2', 11, 'used', 'adasd', 100) 
ON DUPLICATE KEY UPDATE VALUES (a.price, a.condition, a.link, a.price_updated) 

Приведенный выше запрос дает мне правильную синтаксическую ошибку рядом с a (a.idчто я могу делать не так?

Есть идеи?

2 ответа

Решение

Я думаю, это то, что вы ищете:

INSERT INTO products (id, price, cond, link, price_updated) 
VALUES ('t1', 11, 'used', 'adasd', 100), 
   ('t1', 11, 'used', 'adasd', 2100) 
ON DUPLICATE KEY UPDATE 
   price = VALUES(price), 
   cond = VALUES(cond), 
   link = VALUES(link), 
   price_updated = VALUES(price_updated)

SQL Fiddle Demo

Я не думаю, что вы также можете использовать псевдонимы таблиц для этого, но я могу ошибаться.

Кстати, я использовал cond для поля условия, чтобы упростить его - замените его именами полей (вам может понадобиться обратный тик с условием, поскольку я считаю, что это зарезервированное слово).

Вы получаете синтаксическую ошибку, потому что инструкция INSERT Mysql не позволяет вам псевдоним вставленной таблицы: Вы должны сказать, INSERT INTO products (id, ...),

Другие вопросы по тегам