У меня есть таблица tableA, к которой я хочу прибегнуть, а затем вставить / обновить каждую результирующую строку в tableB. В настоящее время у меня есть что-то вроде этого:
delete from tableB;
set @place = 0;
INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;
Это работает, но я не хочу удалять из таблицы B каждый раз, так как таблица, вероятно, будет содержать сотни тысяч строк. Итак, я хотел использовать ON DUPLICATE KEY UPDATE, так как каждый столбец id установлен в качестве PRIMARY KEY. Я пробовал различные версии следующего (перемещение предложения ON DUPLICATE KEY UPDATE)
INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc ON DUPLICATE KEY UPDATE tableB.place = @place, tableB.name = tableA.name, tableB.colD = tableA.colD, tableB.colF = tableA.colF;
НЕ УДАЧИ,
Есть какие-нибудь указатели о том, как это сделать?