Mysql 逗号分割的字典值转换相对应的字典名称
时间: 2024-01-04 12:05:40 浏览: 30
假设有一个表 `mytable`,其中有一列 `dict_values` 存储了逗号分割的数字字典值,需要将其转换为对应的字典名称。可以使用 MySQL 的 `FIND_IN_SET` 函数和 `GROUP_CONCAT` 函数来实现。
首先,需要创建一个字典表 `dict`,其中存储了所有数字字典值的名称和对应的数字值。例如:
```
CREATE TABLE dict (
id INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO dict (id, name) VALUES
(1, 'Apple'),
(2, 'Banana'),
(3, 'Orange'),
(4, 'Pear');
```
然后,可以使用以下查询语句将 `mytable` 表中的逗号分割的数字字典值转换为对应的字典名称:
```
SELECT
GROUP_CONCAT(d.name) AS dict_names
FROM
mytable t
JOIN dict d ON FIND_IN_SET(d.id, t.dict_values)
GROUP BY t.id;
```
这个查询语句将 `mytable` 和 `dict` 表连接起来,通过 `FIND_IN_SET` 函数找到逗号分割的数字字典值在 `dict` 表中对应的名称,然后通过 `GROUP_CONCAT` 函数将多个字典名称合并成一个字符串。最后,通过 `GROUP BY` 子句将结果按照 `mytable` 表中的每一行分组。
相关问题
Mysql:用逗号分割的CODE转换成NAME
假设有一个表格名为 `table1`,包含两个字段 `code` 和 `name`,并且需要将以逗号分隔的 `code` 转化为相应的 `name`,可以使用 MySQL 中的 `FIND_IN_SET` 函数。
以下是实现的 SQL 语句:
```
SELECT GROUP_CONCAT(name) AS names
FROM table1
WHERE FIND_IN_SET(code, '1,2,3') > 0;
```
其中,`code` 是需要转换的以逗号分隔的字符串,类似于 `'1,2,3'`。`GROUP_CONCAT` 函数将返回对应 `code` 的所有 `name` 字段,并用逗号分隔。需要注意的是,`FIND_IN_SET` 函数的返回值为 `0` 或 `NULL`,表示未找到匹配项。
如果需要在同一查询中获取多个以逗号分隔的 `code` 对应的 `name`,可以在 `WHERE` 子句中使用 `OR` 连接多个 `FIND_IN_SET` 函数,如下所示:
```
SELECT GROUP_CONCAT(name) AS names
FROM table1
WHERE FIND_IN_SET(code, '1,2,3') > 0 OR FIND_IN_SET(code, '4,5,6') > 0;
```
以上 SQL 语句将返回两个以逗号分隔的字符串 `'1,2,3'` 和 `'4,5,6'` 对应的所有 `name` 字段,并用逗号分隔。
mysql 用逗号分隔的字典code翻译为以逗号分割的字典name
假设你有一个名为dict的MySQL表,其中包括以下列:code(包含逗号分隔的字典code)和name(包含逗号分隔的字典name)。你可以使用以下查询来实现这个功能:
```
UPDATE dict SET name = (
SELECT GROUP_CONCAT(d2.name ORDER BY FIND_IN_SET(d2.code, REPLACE(dict.code, ' ', '')))
FROM dict AS d2
WHERE FIND_IN_SET(d2.code, REPLACE(dict.code, ' ', '')) > 0
)
WHERE 1;
```
这个查询会将每一行的code分解成单个的code,然后根据这些code查询对应的name,最后将这些name以逗号分隔的形式更新到name列中。请注意,这个查询假设code中的每个code都不包含空格。如果你的code中包含空格,你需要在REPLACE函数中指定正确的分隔符。