LINUX.ORG.RU

История изменений

Исправление Darth_Revan, (текущая версия) :

Как-то так:

START TRANSACTION;
UPDATE t2 SET valid = valid + COALESCE((SELECT valid FROM t1 WHERE store = t2.id ORDER BY id LIMIT 1), 0);
UPDATE t1 SET valid = 0 WHERE id IN (SELECT MIN(id) FROM t1 GROUP BY store);
COMMIT;

Но есть нюанс, и он ровно в том, что нужен identity в t1, чтобы можно было отличить те кортежи/поля, из которых значения были взяты, от тех, откуда не были.

Вообще, если нужно их вообще все взять из t1 и записать в t2, то вот это, как раз, сделать легко:

START TRANSACTION;
UPDATE t2 SET valid = valid + COALESCE((SELECT SUM(valid) FROM t1 WHERE store = t2.id GROUP BY store), 0);
UPDATE t1 SET valid = 0;
COMMIT;

Исправление Darth_Revan, :

Как-то так:

START TRANSACTION;
UPDATE t2 SET valid = valid + COALESCE((SELECT valid FROM t1 WHERE store = t2.id ORDER BY id LIMIT 1), 0);
UPDATE t1 SET valid = 0 WHERE id IN (SELECT MIN(id) FROM t1 GROUP BY store);
COMMIT;

Но есть нюанс, и он ровно в том, что нужен identity в t1, чтобы можно было отличить те кортежи/поля, из которых значения были взяты, от тех, откуда не были.

Исходная версия Darth_Revan, :

Как-то так:

UPDATE t2 SET valid = valid + COALESCE((SELECT valid FROM t1 WHERE store = t2.id ORDER BY id LIMIT 1), 0);
UPDATE t1 SET valid = 0 WHERE id IN (SELECT MIN(id) FROM t1 GROUP BY store);

Но есть нюанс, и он ровно в том, что нужен identity в t1, чтобы можно было отличить те кортежи/поля, из которых значения были взяты, от тех, откуда не были.