mysql - mysql - 更新连接字符串的每个值
问题描述
这个问题跟着这个解决了,但现在我想直接进行更新
我有一张这样的桌子
id | cod | type | qta
-: | :-- | :---------- | --:
1 | aaa | aaa,bbb,ccc | 3
2 | aaa | ddd | 1
3 | aaa | eee,fff | 4
4 | aaa | ggg,hhh | 2
5 | aaa | iii | 7
6 | aaa | lll | 7
我想要这样的结果
id | cod | type | qta
-: | :-- | :---------- | --:
1 | aaa | aaa_1,bbb_1,ccc_1 | 3
2 | aaa | ddd_1 | 1
3 | aaa | eee,fff | 4
4 | aaa | ggg_1,hhh_1 | 2
5 | aaa | iii | 7
6 | aaa | lll | 7
我想更新字符串中的每个单词,其中字符串中的单词数与“qta”相同。
获取我使用的行
select *
from tab1
where char_length(type) - char_length(replace(type, ',', '')) + 1 = qta
但我想拥有:
update tab1
SET type = ...
where char_length(type) - char_length(replace(type, ',', '')) + 1 = qta;
这是进行测试的链接
解决方案
你可以试试下面的东西,
UPDATE tab1
JOIN
(SELECT
id, CONCAT(REPLACE(type, ',', '_1,'), '_1') AS type
FROM
tab1
WHERE
CHAR_LENGTH(type) - CHAR_LENGTH(REPLACE(type, ',', '')) + 1 = qta) val ON tab1.id = val.id
SET
tab1.type = val.type;
推荐阅读
- c++ - 为什么我不能在 FOR LOOP、C++ 中使用 i/10?
- opencv - 读△为减号
- java - 在 lambda 中更改 Goolge 的 Place 对象
- sql-server - SQL Server 中出现意外的重复行
- serialization - 在 .NET Core 3.0 中调用 JsonConvert.DeserializeObject 时缺少 System.Security.Permissions
- c++ - 输入文件并输出到另一个文件并将流文件传递给函数
- reactjs - 发布、拆分道具 ReactJs
- reactjs - 在 React 中,使用箭头函数 onClick={() => this.doSomething()} 是否会显着影响 React 应用程序的性能?
- r - 将 dplyr 管道转换为 SQL 字符串
- html - 您如何设置 HTML5 音频标签以仅显示播放/暂停按钮图像?