Подтвердить что ты не робот

INSERT INTO.. ​​ON DUPLICATE KEY UPDATE для нескольких элементов

Я хочу сделать что-то вроде этого

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value') 
ON DUPLICATE KEY UPDATE 
t.c = 'value';
INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = 'value2';

t.a и t.b - это ключи. Все это работает отлично, но я получаю ошибку во второй вставке. С phpMyAdmin такой запрос отлично работает, но я предполагаю, что он запускает запросы независимо, поскольку он выводит результаты из этого запроса в виде комментариев?

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

INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = ???

Проблема в вопросительных знаках, что я должен там положить, чтобы каждая вставка/обновление имела правильное значение? Очевидно, если я поместил туда значение, все поля получат это значение.

Если есть другой способ выполнить "обновление, если существует, иначе вставьте" запрос на несколько полей с двумя ключами, я тоже задумаюсь над другими идеями. Думаю, я мог бы выполнять каждый запрос отдельно (например, phpMyAdmin?), Но это будет много запросов, поэтому я действительно хочу этого избежать.

4b9b3361

Ответ 2

Слишком низкая репутация для комментариев, но я хотел добавить немного более сложный синтаксис, который был вдохновлен ответом @ʞɔıu. Чтобы обновить несколько полей на дублированном ключе:

INSERT INTO t (t.a, t.b, t.c, t.d)
VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c),
t.d = VALUES(t.d)

Надеюсь, что кто-то там захочет выполнять массовую вставку с несколькими повторными обновлениями ключей. Синтаксис ускользнул от меня.