根据您对问题的更新,您可以这样做
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
结果:
+ ------ + ------- +| id | 值|+ ------ + ------- +| 1 | 1,2,3 |+ ------ + ------- +
这是 SQLFiddle 演示
更新:
根据您的评论,这再次改变了您的问题。为了能够
t1基于中的值更新定界的值字符串,
t2您需要数字表(tally)的帮助来
t1.value即时拆分。您可以像这样轻松创建此类表格
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) bORDER BY n
该脚本会创建一个表,表中的数字从1到100,可以有效分割多达100个定界值。如果您需要更多或更少,则可以轻松调整脚本。
现在更新
t1.value,你可以做
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
假设你有
t1
| ID | value|| ---- | ------- || 1 | 1,4 |
更新的结果将是
| ID | value|| ---- | --------- || 1 | 1,2,3,4 |
这是 SQLFiddle 演示
从长远来看, 您最好重新考虑数据库模式并规范化数据 。通过允许正常维护和查询数据,这将节省大量时间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)