MySQL更新语句仅匹配第一行

MySQL更新语句仅匹配第一行,第1张

MySQL更新语句仅匹配第一行

根据您对问题的更新,您可以这样做

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 演示

从长远来看, 您最好重新考虑数据库模式并规范化数据 。通过允许正常维护和查询数据,这将节省大量时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5640787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存