84

I want to convert selected values into a comma separated string in MySQL.

My initial code is as follows:

SELECT id
FROM table_level
WHERE parent_id = 4;

Which produces:

'5'
'6'
'9'
'10'
'12'
'14'
'15'
'17'
'18'
'779'

My desired output would look like this:

"5,6,9,10,12,14,15,17,18,779"
informatik01
  • 15,636
  • 10
  • 72
  • 102
Karunakar
  • 2,069
  • 4
  • 14
  • 20

10 Answers10

189

Check this:

SELECT GROUP_CONCAT(id)
FROM table_level
WHERE parent_id = 4
GROUP BY parent_id;
informatik01
  • 15,636
  • 10
  • 72
  • 102
naveen goyal
  • 4,411
  • 2
  • 14
  • 26
13

If you have multiple rows for parent_id.

SELECT GROUP_CONCAT(id) FROM table_level where parent_id=4 GROUP BY parent_id;

If you want to replace space with comma.

SELECT REPLACE(id,' ',',') FROM table_level where parent_id=4;
Dharmendra Singh
  • 1,086
  • 12
  • 21
Sanal K
  • 723
  • 4
  • 14
9

Use group_concat() function of mysql.

SELECT GROUP_CONCAT(id) FROM table_level where parent_id=4 GROUP BY parent_id;

It'll give you concatenated string like :

5,6,9,10,12,14,15,17,18,779 
Nishu Tayal
  • 19,244
  • 8
  • 46
  • 96
8

Try this

SELECT CONCAT('"',GROUP_CONCAT(id),'"') FROM table_level 
where parent_id=4 group by parent_id;

Result will be

 "5,6,9,10,12,14,15,17,18,779"
Ankit Sharma
  • 3,735
  • 2
  • 28
  • 46
8

First to set group_concat_max_len, otherwise it will not give you all the result:

SET GLOBAL  group_concat_max_len = 999999;
SELECT GROUP_CONCAT(id)  FROM table_level where parent_id=4 group by parent_id;
wscourge
  • 9,289
  • 12
  • 51
  • 72
cksahu
  • 121
  • 1
  • 4
5

The default separator between values in a group is comma(,). To specify any other separator, use SEPARATOR as shown below.

SELECT GROUP_CONCAT(id SEPARATOR '|')
FROM `table_level`
WHERE `parent_id`=4
GROUP BY `parent_id`;

5|6|9|10|12|14|15|17|18|779

To eliminate the separator, then use SEPARATOR ''

SELECT GROUP_CONCAT(id SEPARATOR '')
FROM `table_level`
WHERE `parent_id`=4
GROUP BY `parent_id`;

Refer for more info GROUP_CONCAT

Rohan Khude
  • 4,086
  • 5
  • 47
  • 42
2

Use group_concat method in mysql

kamal pal
  • 4,119
  • 5
  • 24
  • 39
hepizoj
  • 233
  • 4
  • 9
1

Just so for people doing it in SQL server: use STRING_AGG to get similar results.

DPP
  • 12,146
  • 2
  • 46
  • 45
0

Using the GROUP_CONCAT, here is another way to make it flexible :

SELECT GROUP_CONCAT('"',id,'"') FROM table_level where parent_id=4 GROUP BY parent_id;

This will return the values as :

"181","187","193","199","205","211","217","223","229","235","239","243","247","251"

You can concat using any other separator. This will help in case you want to use the return value directly somewhere.

Yogesh A Sakurikar
  • 1,521
  • 1
  • 10
  • 13
0
SELECT GROUP_CONCAT(id) as ids FROM table_level where parent_id=4 group by parent_id;
Sandeep Sherpur
  • 1,888
  • 20
  • 22