gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:03:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com