Varsayalım ki elinizdeki tabloda birden fazla kayıt var ve siz içindeki verileri virgül ile birleştirmek istiyorsunuz. Nasıl yapıldığını görmek için aşağıdaki örneğe bakabilirsiniz.


Veritabanı kayıtları


Bu örneğimizde 1 "manager", 0 veya daha fazla "category" sahibi olabilir yani 1-n ilişki söz konusu.


Manager


mysql> SELECT * FROM manager;
+----+----------------+
| id | name |
+----+----------------+
| 1 | Robert De Niro |
| 2 | Al Pacino |
| 3 | Andy Garcia |
+----+----------------+
3 rows in set (0.00 sec)

Category


mysql> SELECT * FROM category;
+----+------+------------+
| id | code | manager_id |
+----+------+------------+
| 1 | A | 1 |
| 2 | B | 1 |
| 3 | A | 2 |
+----+------+------------+
3 rows in set (0.00 sec)

Basit sorgu


mysql> SELECT
-> `manager`.`name` AS Manager,
-> `category`.`code` AS Category
-> FROM `manager`
-> LEFT JOIN `category` ON `manager`.`id` = `category`.`manager_id`;
+----------------+----------+
| Manager | Category |
+----------------+----------+
| Robert De Niro | A |
| Robert De Niro | B |
| Al Pacino | A |
| Andy Garcia | NULL |
+----------------+----------+
4 rows in set (0.00 sec)

Birleştirilmiş sorgu


mysql> SELECT
-> `manager`.`name` AS Manager,
-> GROUP_CONCAT(`category`.`code` SEPARATOR ', ') AS Category
-> FROM `manager`
-> LEFT JOIN `category` ON `manager`.`id` = `category`.`manager_id`
-> GROUP BY `manager`.`name`;
+----------------+----------+
| Manager | Category |
+----------------+----------+
| Al Pacino | A |
| Andy Garcia | NULL |
| Robert De Niro | A, B |
+----------------+----------+
3 rows in set (0.00 sec)