Baseret på din opdatering af dit spørgsmål kan du gøre det sådan her
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
Resultat:
+------+-------+| id | værdi |+------+------+| 1 | 1,2,3 |+------+-------+
Her er SQLFiddle demo
OPDATERING: Baseret på dine kommentarer, som ændrede dit spørgsmål igen. For at kunne opdatere en afgrænset streng af værdier i t1
baseret på værdier i t2
du har brug for hjælp fra en tal(tally)-tabel til at opdele t1.value
on the fly.Du kan nemt oprette sådan en tabel som denne
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
Dette script opretter en tabel med en sekvens af tal fra 1 til 100, som gør det muligt effektivt at opdele op til 100 afgrænsede værdier. Hvis du har brug for mere eller mindre, kan du nemt justere scriptet.
Nu skal du opdatere t1.value
du kan gøre
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
Forudsat at du har i t1
| ID | VÆRDI ||----|-------|| 1 | 1,4 |
resultatet af opdateringen vil være
| ID | VÆRDI ||----|--------|| 1 | 1,2,3,4 |
Her er SQLFiddle demo
Når alt er sagt i det lange løb du må hellere genoverveje dit db-skema og normalisere dine data . Det vil betale sig stort ved at tillade normalt at vedligeholde og forespørge på dine data.