我在 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/