mysql - 用 mysql 中其他表中的相应描述替换数字

标签 mysql replace

我有一个表“cat_id”,其中包含字段 id 和类别,如下所示:

id    category
1      23/47/2345/765
2      93/3/256/23/4700
3      23/47/443
4      76/223/5

以及其他包含每个类别名称的表。该表“描述”如下所示:

id     name
23     abc
47     xyz
2345   aabbcc
765    xxyyzz
93     .....

现在我想更新表“cat_id”并替换并使用这些名称而不是类别 ID

结果:

id    category
1     abc/xyz/aabbcc/xxyyzz
2     .....

最佳答案

DELIMITER $$

DROP FUNCTION IF EXISTS split_count$$
CREATE FUNCTION split_count(str VARCHAR(200), delim CHAR(1)) RETURNS INT
  RETURN (LENGTH(REPLACE(str, delim, CONCAT(delim, ' '))) - LENGTH(str)) $$

DROP FUNCTION IF EXISTS split_replace$$
CREATE FUNCTION split_replace(str VARCHAR(200), delim CHAR(1)) RETURNS VARCHAR(200)
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE rstr VARCHAR(200) DEFAULT NULL;

  WHILE i <= split_count(str, delim)
  DO
    SELECT `name` INTO @replaced_name FROM description WHERE id = SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, i+1), delim, -1);
    SET rstr = CONCAT_WS(delim, rstr, @replaced_name);
    SET i = i + 1;
  END WHILE;
  RETURN rstr;
END $$

DELIMITER ;

UPDATE cat_id SET category = split_replace(category, '/');

关于mysql - 用 mysql 中其他表中的相应描述替换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444811/

相关文章:

regex - Notepad++ regex 如何替换第三次出现的斜杠并绕过第一个和第二个斜杠?

mysql - 将 sql master 链接到属性表,然后将 prop 值表示为列

mysql - 与不使用索引相比,使用索引的查询性能较差

php - PHP 中爆炸为数组

mysql - 外键中的RESTRICT是什么意思?

javascript - 如何替换\r\n

regex - 如何在我的替换语句中检索 powershell 中对象的值?

mysql - 如何按日期查询 SUM 和 WHERE,但该行仍然存在

sql - 删除在字符串列中找到的数字

javascript - 查找并替换@foo的实例,但不替换@@foo的实例