ใช้ GROUP_CONCAT() ร่วมกับ CONCAT() และ REPLACE() เพื่อรวมค่าจากหลายแถว ใส่เครื่องหมายคำพูด (Single Quote) และกำจัดค่าซ้ำ (DISTINCT)
ตัวอย่างการใช้งาน
1. สร้างตาราง (เก็บค่า CSV ใน 1 คอลัมน์)
mysql> CREATE TABLE DemoTable1799 (
EmployeeId VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)
2. เพิ่มข้อมูล (รูปแบบ Comma-Separated)
mysql> INSERT INTO DemoTable1799 VALUES('101,102,103,104');
mysql> INSERT INTO DemoTable1799 VALUES('106,109');
3. แสดงข้อมูลเดิม
mysql> SELECT * FROM DemoTable1799; +-----------------+ | EmployeeId | +-----------------+ | 101,102,103,104 | | 106,109 | +-----------------+
4. Query: แยกค่า ใส่ Quote กรองซ้ำ รวมกลับเป็น CSV
mysql> SELECT GROUP_CONCAT(DISTINCT CONCAT('''', REPLACE(EmployeeId, ',', ''','''), '''')) AS Output
FROM DemoTable1799;
การทำงานทีละขั้นตอน:
REPLACE(EmployeeId, ',', ''','''): แทนที่ comma (,) ด้วย','(คอมมา + ควอตเดี่ยว 2 ตัว)CONCAT('''', ..., '''''): เพิ่มควอตเดี่ยวหน้าและหลังสตริงทั้งหมดDISTINCT: กรองค่าซ้ำ (ถ้ามี)GROUP_CONCAT(...): รวมทุกแถวกลายเป็น 1 สตริง คั่นด้วย comma (default)
5. ผลลัพธ์
+-------------------------------------+ | Output | +-------------------------------------+ | '101','102','103','104','106','109' | +-------------------------------------+
การใช้งานจริง: สร้าง IN Clause สำหรับ Query อื่น
-- ผลลัพธ์: '101','102','103','104','106','109' -- นำไปใช้ใน: SELECT * FROM OtherTable WHERE id IN (ผลลัพธ์ด้านบน);
ตัวเลือก GROUP_CONCAT
GROUP_CONCAT(DISTINCT expr ORDER BY expr SEPARATOR ',')
DISTINCT: กรองซ้ำORDER BY: เรียงลำดับก่อนรวมSEPARATOR: ตัวคั่น (Default = ',')group_concat_max_len: ความยาวสูงสุด (Default 1024 ตัวอักษร ต้อง SET SESSION หากข้อมูลเยอะ)
สรุป
เทคนิค GROUP_CONCAT(CONCAT('''', REPLACE(col, ',', ''','''), '''')) เหมาะสำหรับแปลงข้อมูล CSV ในคอลัมน์เดียว ให้กลายเป็น Quoted CSV พร้อม DISTINCT สำหรับสร้าง Dynamic IN Clause หรือ Export ข้อมูล