【问题标题】:mysql - update each value of a concatenated stringmysql - 更新连接字符串的每个值
【发布时间】:2019-11-13 12:32:11
【问题描述】:

这个问题跟this 解决了,但是现在我想直接做一个更新

我有一张这样的桌子

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;

Here进行测试的链接

【问题讨论】:

  • 要更新匹配的行,使用下面的查询: update tab1 SET type = concat(replace(type, ',', '_1,'),'_1') where char_length(type) - char_length(replace(type, ',', '')) + 1 = qta;

标签: mysql


【解决方案1】:

你可以试试下面的,

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2013-12-14
    • 2010-11-19
    • 2014-03-31
    • 2019-07-03
    • 2013-12-29
    相关资源
    最近更新 更多