Na základě aktualizace vaší otázky to můžete udělat takto
UPDATE t1 JOIN
(
SELECT id, GROUP_CONCAT(DISTINCT value ORDER BY value) value
FROM t2
GROUP BY id
) q
ON t1.id = q.id
SET t1.value = q.value
Výsledek:
+------+-------+ | id | value | +------+-------+ | 1 | 1,2,3 | +------+-------+
Zde je SQLFiddle demo
AKTUALIZACE: Na základě vašich komentářů, které znovu změnily vaši otázku. Aby bylo možné aktualizovat řetězec hodnot s oddělovači v t1
na základě hodnot v t2
k rozdělení t1.value
budete potřebovat pomoc s číselnou (sčítací) tabulkou za běhu.Takovou tabulku můžete snadno vytvořit
CREATE TABLE tally(n INT NOT NULL PRIMARY KEY);
INSERT INTO tally (n)
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
Tento skript vytvoří tabulku s posloupností čísel od 1 do 100, která umožní efektivně rozdělit až 100 oddělených hodnot. Pokud potřebujete více či méně, můžete skript snadno upravit.
Nyní aktualizujte t1.value
můžete udělat
UPDATE t1 JOIN
(
SELECT id, GROUP_CONCAT(value ORDER BY value) value
FROM
(
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(t1.value, ',', n.n), ',', -1) value
FROM t1 CROSS JOIN tally n
WHERE n.n <= 1 + (LENGTH(t1.value) - LENGTH(REPLACE(t1.value, ',', '')))
UNION
SELECT id, value
FROM t2
) v
GROUP BY id
) q
ON t1.id = q.id
SET t1.value = q.value
Za předpokladu, že máte v t1
| ID | VALUE | |----|-------| | 1 | 1,4 |
výsledkem aktualizace bude
| ID | VALUE | |----|---------| | 1 | 1,2,3,4 |
Zde je SQLFiddle demo
To vše z dlouhodobého hlediska raději přehodnoťte své schéma databáze a normalizujte svá data . To se vám hodně vyplatí, protože umožníte běžnou údržbu a dotazování vašich dat.