เมื่อต้องการ GROUP_CONCAT ค่าที่ไม่ซ้ำ (DISTINCT) จัดกลุ่มตาม ID ให้ใช้ Subquery กรอง DISTINCT ก่อน แล้วค่อย GROUP_CONCAT
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Id int,
Name varchar(100) );
Query OK, 0 rows affected (0.64 sec)
เพิ่มข้อมูล (มี Id และ Name ซ้ำ)
mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.44 sec) mysql> insert into DemoTable values(200,'Robert'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(300,'David'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(400,'Mike'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(400,'Mike'); Query OK, 1 row affected (0.10 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+------+--------+ | Id | Name | +------+--------+ | 100 | Chris | | 200 | Robert | | 100 | Chris | | 300 | David | | 400 | Mike | | 400 | Mike | +------+--------+ 6 rows in set (0.00 sec)
คำสั่ง GROUP_CONCAT DISTINCT โดยใช้ Subquery
mysql> select group_concat(Name) from (
select distinct Id, Name from DemoTable
) tbl;
ผลลัพธ์
+-------------------------+ | group_concat(Name) | +-------------------------+ | Chris,Robert,David,Mike | +-------------------------+ 1 row in set (0.00 sec)
คำอธิบาย: Subquery SELECT DISTINCT Id, Name FROM DemoTable กรองแถวซ้ำออกก่อน (Id+Name คู่เดียวกัน) แล้วค่อย GROUP_CONCAT(Name) รวมชื่อทั้งหมดเป็นสตริงเดียว
MySQL 8.0+ รองรับ: GROUP_CONCAT(DISTINCT Name ORDER BY Name) โดยตรง ไม่ต้อง Subquery (แต่ DISTINCT ใน GROUP_CONCAT ใช้กับคอลัมน์เดียว ไม่ใช่คู่ Id+Name)