Для Mysql 8.0+ вы можете использовать функции окна ROW_NUMBER()
и SUM()
:
INSERT INTO Table1 (Sum, Count, Name1, Address1, Zip1)
SELECT SUM(t2.rn) OVER (ORDER BY t2.rn),
t2.rn, t2.Name, t2.Address, t2.Zip
FROM (SELECT *, ROW_NUMBER() OVER () AS rn FROM Table2) t2;
См. demo .
Для предыдущих версий вы можете использовать переменные для вычисления Count
и Sum
:
SET @rownum:=0;
SET @sum:=0;
INSERT INTO Table1 (Count, Sum, Name1, Address1, Zip1)
SELECT @rownum:=(@rownum+1), @sum:=(@sum+@rownum),
Name, Address, Zip
FROM Table2;
См. demo .
Но поскольку порядок оценки столбцов переменных не гарантируется, лучше использовать вложенный подзапрос, чтобы вы вычисляли столбец Sum
после Count
:
SET @rownum:=0;
SET @sum:=0;
INSERT INTO Table1 (Sum, Count, Name1, Address1, Zip1)
SELECT @sum:=(@sum+t2.rn),
t2.rn, Name, Address, Zip
FROM (SELECT @rownum:=(@rownum+1) AS rn, Name, Address, Zip FROM Table2) t2;
См. демонстрацию .
Обратите внимание, что во всех случаях порядок строк Table2
, вставленных в Table1
, не определен. Если вы хотите, чтобы они были вставлены, скажем, с сортировкой по Name
, тогда во всех запросах необходимо использовать предложение ORDER BY
.