Dựa trên cập nhật cho câu hỏi của bạn, bạn có thể làm như thế này
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
Kết quả:
+------+-------+ | id | value | +------+-------+ | 1 | 1,2,3 | +------+-------+
Đây là SQLFiddle bản demo
CẬP NHẬT: Dựa trên nhận xét của bạn mà đã thay đổi câu hỏi của bạn một lần nữa. Để có thể cập nhật một chuỗi giá trị được phân tách trong t1
dựa trên các giá trị trong t2
bạn sẽ cần sự trợ giúp của một bảng số (kiểm đếm) để tách t1.value
Bạn có thể dễ dàng tạo bảng như thế này
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
Tập lệnh đó tạo ra một bảng với một chuỗi các số từ 1 đến 100 sẽ cho phép phân chia hiệu quả tối đa 100 giá trị được phân tách. Nếu bạn cần nhiều hơn hoặc ít hơn, bạn có thể dễ dàng điều chỉnh tập lệnh.
Bây giờ để cập nhật t1.value
bạn có thể làm
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
Giả sử rằng bạn có trong t1
| ID | VALUE | |----|-------| | 1 | 1,4 |
kết quả của cập nhật sẽ là
| ID | VALUE | |----|---------| | 1 | 1,2,3,4 |
Đây là SQLFiddle bản demo
Đó là tất cả những gì đã nói về lâu dài bạn nên xem xét lại giản đồ db và chuẩn hóa dữ liệu của mình tốt hơn . Điều đó sẽ mang lại hiệu quả lớn bằng cách cho phép duy trì và truy vấn dữ liệu của bạn một cách bình thường.