MySQL ON DUPLICATE KEY - в последний раз вставляет идентификатор?

Попробуйте использовать CASE выражение

SELECT  COUNT(DISTINCT CASE WHEN  FIELDTWO= 'VALUEONE' THEN FIELDONE END) X ,
COUNT(DISTINCT CASE WHEN  FIELDTWO= 'VALUETWO' THEN FIELDONE END)Y
FROM MYTABLE 
125
задан Ken Wayne VanderLinde 6 October 2016 в 20:48
поделиться

4 ответа

Проверьте эту страницу: https://web.archive.org/web /20150329004325/https://dev.mysql.com/doc/refman/5.0/ru/insert-on-duplicate.html
В нижней части страницы они объясняют, как вы можете сделать LAST_INSERT_ID значимым для обновлений, передавая выражение для этой функции MySQL.

Из примера документации MySQL:

Если таблица содержит столбец AUTO_INCREMENT и INSERT ... UPDATE вставляет строку, функция LAST_INSERT_ID () возвращает значение AUTO_INCREMENT. Если инструкция обновляет строку, LAST_INSERT_ID () не имеет смысла. Тем не мение, Вы можете обойти это, используя LAST_INSERT_ID (expr). Предположим, что id является столбцом AUTO_INCREMENT. Чтобы сделать LAST_INSERT_ID () значимым для обновлений, вставьте строки следующим образом:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
161
ответ дан 24 November 2019 в 01:01
поделиться

Вы можете посмотреть на REPLACE, который по сути является удалением / вставкой, если запись существует. Но это изменило бы поле автоинкремента, если оно присутствует, что могло бы нарушить отношения с другими данными.

2
ответ дан 24 November 2019 в 01:01
поделиться

Я не знаю какая у вас версия MySQL, но с InnoDB, была ошибка с autoinc

, ошибка в 5.1.20 и исправлена ​​в 5.1.23 http://bugs.mysql.com/bug.php?id=27405

ошибка в 5.1.31 и исправлена ​​в 5.1.33 http://bugs.mysql.com/bug.php?id=42714

2
ответ дан 24 November 2019 в 01:01
поделиться

Стоит отметить, и это может быть очевидно (но я все равно скажу это для ясности здесь), что REPLACE удалит существующую совпадающую строку перед вставкой новых данных. ON DUPLICATE KEY UPDATE обновит только указанные вами столбцы и сохранит строку.

Из руководства :

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ индекс, старый строка удаляется до того, как новая строка будет вставлен.

0
ответ дан 24 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: