Выполнение INSERT INTO tableA с под-SELECT для tableB, отсортированного с ON DUPLICATE KEY UPDATE - PullRequest
0 голосов
/ 20 июля 2009

У меня есть таблица 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;

НЕ УДАЧИ,

Есть какие-нибудь указатели о том, как это сделать?

1 Ответ

1 голос
/ 20 июля 2009

Почему вы не используете представления для этой цели?

create view tableb as 
SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;

Таким образом, будет меньше проблем, потому что он будет автоматически обновляться.

Документация MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...