Baserat på din uppdatering av din fråga kan du göra det så här
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 | value | +------+-------+ | 1 | 1,2,3 | +------+-------+
Här är SQLFiddle demo
UPPDATERING: Baserat på dina kommentarer som ändrade din fråga igen. För att kunna uppdatera en avgränsad sträng av värden i t1
baserat på värden i t2
du behöver hjälp av en taltabell för att dela t1.value
i farten. Du kan enkelt skapa en sådan tabell som den här
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
Det skriptet skapar en tabell med en nummersekvens från 1 till 100 som gör det möjligt att effektivt dela upp till 100 avgränsade värden. Om du behöver mer eller mindre kan du enkelt justera skriptet.
Nu ska du uppdatera t1.value
du kan göra
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
Förutsatt att du har i t1
| ID | VALUE | |----|-------| | 1 | 1,4 |
resultatet av uppdateringen blir
| ID | VALUE | |----|---------| | 1 | 1,2,3,4 |
Här är SQLFiddle demo
Med det sagt i det långa loppet det är bättre att ompröva ditt db-schema och normalisera dina data . Det kommer att löna sig stort genom att tillåta att normalt underhålla och söka efter dina data.