如何基于逗号分隔字符串字段关联两表聚合得到斜杠分隔名称
逗号分隔ID关联匹配并拼接斜杠分隔名称实现方案
现有两张数据表,其中一张表的字段存储了逗号分隔的多个ID值,第二张表为ID与名称的映射表,需求为将ID匹配对应名称后,返回斜杠分隔的名称拼接结果。
表结构与示例数据
表1(Table1)
| id | value1 | ids | value2 |
|---|---|---|---|
| 1 | abcd | 1,2,3 | efgh |
| 2 | ijkl | 1,4,6 | mnop |
表2(Table2)
| id | name |
|---|---|
| 1 | 1AB |
| 2 | 2CD |
| 3 | 3EF |
| 4 | 4GH |
| 5 | 5IJ |
| 6 | 6KL |
参考查询SQL
使用FIND_IN_SET函数匹配逗号分隔的ID值,再通过GROUP_CONCAT按指定斜杠分隔符拼接名称即可,语句如下:
SELECT a.*, GROUP_CONCAT(b.name SEPARATOR '/') AS groupedName FROM table1 a LEFT JOIN table2 b ON FIND_IN_SET(b.id, a.ids) WHERE a.id = 1 GROUP BY a.id
注意:直接写
b.id IN (a.ids)无法正确解析逗号分隔的字符串,仅会匹配第一个ID值,替换为FIND_IN_SET才能正确匹配所有拆分后的ID;GROUP_CONCAT显式指定SEPARATOR '/'可避免数据库默认分隔符配置差异导致的结果异常,加上GROUP BY a.id可保证单条Table1记录只返回一行聚合结果。
查询返回结果
| id | value1 | ids | value2 | groupedName |
|---|---|---|---|---|
| 1 | abcd | 1,2,3 | efgh | 1AB/2CD/3EF |
内容的提问来源于stack exchange,提问作者Daniel Tengler
相关产品推荐
相关产品推荐

