In one table I have a column with multiple values separated by a comma. In the second, columns with id
and name
. I need to get names separated by a slash.
Table1:
id | value1 | ids | value2 |
---|---|---|---|
1 | abcd | 1,2,3 | efgh |
2 | ijkl | 1,4,6 | mnop |
Table2:
id | name |
---|---|
1 | 1AB |
2 | 2CD |
3 | 3EF |
4 | 4GH |
5 | 5IJ |
6 | 6KL |
SELECT
a.*,
GROUP_CONCAT(b.name,'/') groupedName
FROM
table1 a
LEFT JOIN
table2 b ON b.id IN (a.ids)
WHERE
a.id = 1
Result:
id | value1 | ids | value2 | groupedName |
---|---|---|---|---|
1 | abcd | 1,2,3 | efgh | 1AB/2CD/3EF |
CodePudding user response:
Given that your "Table1.ids" has VARCHAR(n)
type, you can use the LIKE
function for the matching condition on the JOIN
between the two tables, only then apply the GROUP_CONCAT
aggregation function:
SELECT t1.id,
t1.value1,
t1.ids,
t1.value2,
GROUP_CONCAT(t2.name, '/') AS groupedName
FROM table1 t1
INNER JOIN table2 t2
ON t1.ids LIKE t2.id || ',%'
OR t1.ids LIKE '%,' || t2.id || ',%'
OR t1.ids LIKE '%,' || t2.id
GROUP BY t1.id,
t1.value1,
t1.ids,
t1.value2
Check the demo here.