Как вставить вычисленное значение со значениями из выбранного запроса вместе? - PullRequest
0 голосов
/ 25 мая 2020

У меня есть 2 таблицы, а именно:

Table1 ( Sum, count, Name1, Address1, Zip1)
Table2 (Name, Address, Zip)
sum = 0;
for(int i=1; i<=10; i++)
{
    sum += i;
}

Мне нужно вставить значение суммы после каждой итерации, а также значение 'i' в столбец Sum, количество таблицы 1 вместе со всеми столбцы таблицы 2.

Insert into Table1(Sum, count, Name1, Address1, Zip1)
Select * from Table2

Выше мой SQL запрос, как вставить сумму и количество.

1 Ответ

0 голосов
/ 25 мая 2020

Для 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.

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