INSERT INTO … SELECT FROM … ON DUPLICATE KEY UPDATE

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

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE ...; //update all fields to values from SELECT, // except for exp_id, created_by, location, animal, // starttime, endtime 

Я не уверен, какой синтаксис для предложения UPDATE должен быть. Как я могу ссылаться на текущую строку из предложения SELECT ?

MySQL будет принимать часть до того, как equals ссылается на столбцы, имена которых указаны в предложении INSERT INTO, а вторая часть ссылается на столбцы SELECT.

 INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ... 

Хотя я очень опаздываю на это, но, увидев некоторые законные вопросы для тех, кто хотел использовать запрос INSERT-SELECT с предложением GROUP BY , я придумал для этого работу.

Взяв далее ответ Маркуса Адамса и учетную группу GROUP BY , я решил решить эту проблему, используя Subqueries in the FROM Clause

 INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT sb.id, uid, sb.location, sb.animal, sb.starttime, sb.endtime, sb.entct, sb.inact, sb.inadur, sb.inadist, sb.smlct, sb.smldur, sb.smldist, sb.larct, sb.lardur, sb.lardist, sb.emptyct, sb.emptydur FROM (SELECT id, uid, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur FROM tmp WHERE uid=x GROUP BY location) as sb ON DUPLICATE KEY UPDATE entct=sb.entct, inact=sb.inact, ... 
  • «Неверное строковое значение» при попытке вставить UTF-8 в MySQL через JDBC?
  • Как работает ORDER BY RAND () MySQL?
  • добавить столбец в таблицу mysql, если он не существует
  • Почему автоинкремент MySQL увеличивается при неудачных вставках?
  • Как правильно создавать составные первичные ключи - MYSQL
  • Ограничение для предотвращения вставки пустой строки в MySQL
  • MySQL Создание таблиц с внешними ключами, дающих errno: 150
  • Как обращаться к MySQL из нескольких streamов одновременно
  • Как вы выбираете каждую n-ю строку из mysql
  • mySQL выбирает один столбец DISTINCT, с соответствующими другими столбцами
  • Разделительная строка с разделителями разделов MySQL в таблицу Temp
  • Давайте будем гением компьютера.