mysql - ID 的字符串分割并与 MySQL 中的名称连接

标签 mysql stored-procedures split concatenation

我在 MySQL 中有以下表格

表1:
c1 ID
A1 3|5|2
A2 1|2
A3 3
A4 1|2|3|4|5
A5 2|4|1|3

表2:
id名称
1 AA
2 阿伯特
3 CDE
4 XXWQ
5年

我想将 tb1.ids = tb2.id 上的两个表连接为拆分表 1 中的所有 id,然后替换为它们的名称,然后再次连接。

输出

3|5|2 -> CDE|Y|ABERT
1|2 -> AA|ABERT

我正在使用以下代码来分割字符串。

CASE WHEN tb1.ids LIKE '%|%'THEN SUBSTRING_INDEX( `tb1.ids` , '|', 1 ) ELSE tb1.ids END AS id1,
CASE WHEN tb1.ids LIKE '%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 2 ),'|',-1) WHEN tb1.ids LIKE '%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 )ELSE '' END AS id2,
CASE WHEN tb1.ids LIKE '%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 3 ),'|',-1) WHEN tb1.ids LIKE '%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id3,
CASE WHEN tb1.ids LIKE '%|%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 4 ),'|',-1) WHEN tb1.ids LIKE '%|%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id4,
CASE WHEN tb1.ids LIKE '%|%|%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 5 ),'|',-1) WHEN tb1.ids LIKE '%|%|%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id5

最佳答案

在表中存储分隔字段几乎总是一个坏主意。

但是,如果字段用逗号分隔,则可以使用 FIND_IN_SET 函数。如果绝望,您可以使用 REPLACE 将 FIND_IN_SET 函数中的分隔符更改为逗号:-

SELECT a.c1,
        a.ids,
        GROUP_CONCAT(b.name SEPARATOR '|')
FROM Table1 a
INNER JOIN Table2 b
ON FIND_IN_SET(b.id, REPLACE(a.ids, '|', ','))
GROUP BY a.c1,
        a.ids

关于mysql - ID 的字符串分割并与 MySQL 中的名称连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42481022/

相关文章:

mysql - 如何找到其具有 mysql 客户端和路径的主机?

php - SUM 函数在 MYSQL 存储过程中不起作用?

java - 在java中使用正则表达式和split方法时遇到问题

java - GUI 输入和输出问题

php - 使用 PHP 和 MySQL 创建相关或类似的帖子

java - 如何以 JSON 格式显示多对一对象

如果表为空,则为 Php & mysql

postgresql - 原则 2 - 来自存储过程的水合

sql - 如何检查SQL子查询中某个字段是否存在?

python - “元组”对象没有属性 'rstrip' python