Na podstawie aktualizacji Twojego pytania możesz to zrobić w ten sposób
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
Wynik:
+------+-------+ | id | value | +------+-------+ | 1 | 1,2,3 | +------+-------+
Oto SQLFiddle demo
AKTUALIZACJA: Na podstawie Twoich komentarzy, które ponownie zmieniły Twoje pytanie. Aby móc zaktualizować rozdzielany ciąg wartości w t1
na podstawie wartości w t2
będziesz potrzebować pomocy tabeli liczb (tally), aby podzielić t1.value
w locie.Możesz łatwo stworzyć taki stół
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
Skrypt ten tworzy tabelę z ciągiem liczb od 1 do 100, co pozwoli na efektywne rozbicie do 100 oddzielonych wartości. Jeśli potrzebujesz więcej lub mniej, możesz łatwo dostosować skrypt.
Teraz zaktualizuj t1.value
możesz zrobić
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
Zakładając, że masz w t1
| ID | VALUE | |----|-------| | 1 | 1,4 |
wynikiem aktualizacji będzie
| ID | VALUE | |----|---------| | 1 | 1,2,3,4 |
Oto SQLFiddle demo
Biorąc to wszystko pod uwagę, na dłuższą metę lepiej rozważ ponownie schemat bazy danych i znormalizuj swoje dane . To się opłaci, pozwalając na normalne utrzymywanie danych i wysyłanie zapytań.