En fonction de votre mise à jour de votre question, vous pouvez le faire comme ceci
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
Résultat :
+------+-------+ | id | value | +------+-------+ | 1 | 1,2,3 | +------+-------+
Voici SQLFiddle démo
MISE À JOUR : Sur la base de vos commentaires qui ont encore changé votre question. Pour pouvoir mettre à jour une chaîne délimitée de valeurs dans t1
basé sur les valeurs dans t2
vous aurez besoin de l'aide d'une table de nombres (tally) pour diviser t1.value
à la volée. Vous pouvez facilement créer un tel tableau comme celui-ci
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
Ce script crée un tableau avec une séquence de nombres de 1 à 100 qui permettra de diviser efficacement jusqu'à 100 valeurs délimitées. Si vous avez besoin de plus ou moins, vous pouvez facilement ajuster le script.
Maintenant, pour mettre à jour t1.value
vous pouvez faire
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
En supposant que vous avez dans t1
| ID | VALUE | |----|-------| | 1 | 1,4 |
le résultat de la mise à jour sera
| ID | VALUE | |----|---------| | 1 | 1,2,3,4 |
Voici SQLFiddle démo
Cela étant dit, à long terme, vous feriez mieux de reconsidérer votre schéma de base de données et de normaliser vos données . Cela rapportera gros en permettant normalement de maintenir et d'interroger vos données.