Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL ใส่เครื่องหมายคำพูดค่าคอลัมน์ด้วย GROUP_CONCAT + CONCAT + DISTINCT

ใช้ 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;

การทำงานทีละขั้นตอน:

  1. REPLACE(EmployeeId, ',', ''',''') : แทนที่ comma (,) ด้วย ',' (คอมมา + ควอตเดี่ยว 2 ตัว)
  2. CONCAT('''', ..., ''''') : เพิ่มควอตเดี่ยวหน้าและหลังสตริงทั้งหมด
  3. DISTINCT : กรองค่าซ้ำ (ถ้ามี)
  4. 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 ข้อมูล