-- Trainers DROP TABLE IF EXISTS temp; -- Делаем временную таблицу -- e - entry тренера -- с - число заклинаний -- s сумма кодов заклинаний, используется в качестве хэш-функции, -- которая позволяет надеяться, что наборы спелов у тренеров одинаковы -- me = min(entry) - будущий entry шаблона CREATE TABLE temp ENGINE = MEMORY SELECT entry AS e , count(spell) AS c , sum(spell) AS s, 1 as me FROM npc_trainer GROUP BY e ORDER BY 3, 2; -- Если таблицу temp почистить от строк, в которых указаны "малоповторяющиеся" тренеры, -- то можно часть информации оставить в npc_trainer, остальное перенести в npc_trainer_templatе . -- Например, после запроса -- delete from temp where temp.s in (select x.s from (SELECT s,count(s) as cs FROM temp GROUP BY s) as x where x.cs=1) -- информацию об "уникальных тренерах" останется в npc_trainer -- сопоставляем тренера с будущим entry шаблона UPDATE temp, (SELECT min(e) AS m , s FROM temp GROUP BY s) AS t SET me = m WHERE temp.S = t.s; -- копируем спелы в шаблон INSERT INTO npc_trainer_template SELECT * FROM npc_trainer where npc_trainer.entry in (select distinct me from temp ); -- прописываем trainer_id всем "шаблонизированным" тренерам UPDATE creature_template, temp set trainer_id=me WHERE entry=e; -- Чистим данные о спелах "шаблонизированных" тренеров. -- Так как в таблице temp все тренеры (даже те, которые уникальные), то запрос аналогичен DELETE FROM npc_trainer . DELETE FROM npc_trainer WHERE entry IN (select e from temp ); DROP TABLE IF EXISTS temp; -- Vendors -- С вендорами поступаем аналогично. CREATE TABLE temp ENGINE = MEMORY SELECT entry AS e , count(item) AS c , sum(item) AS s,1 as me FROM npc_vendor GROUP BY e ORDER BY 3, 2; UPDATE temp, (SELECT min(e) AS m , s FROM temp GROUP BY s) AS t SET me = m WHERE temp.S = t.s; INSERT INTO npc_vendor_template SELECT * FROM npc_vendor where npc_vendor.entry in (select distinct me from temp ); UPDATE creature_template, temp set vendor_id=me WHERE entry=e; DELETE FROM npc_vendor WHERE entry IN (select e from temp ); DROP TABLE IF EXISTS temp;