Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL nối chuỗi (concatenate) giá trị theo ID chung với GROUP_CONCAT

Để gộp nhiều giá trị từ các hàng cùng nhóm thành một chuỗi, phân cách bằng dấu phẩy, MySQL cung cấp hàm tổng hợp GROUP_CONCAT().

Ví dụ minh họa

Tạo bảng sinh viên:

mysql> create table DemoTable ( 
    StudentId int, 
    StudentFirstName varchar(100), 
    StudentLastName varchar(100) 
);

Chèn dữ liệu (3 sinh viên cùng StudentId = 1000):

mysql> insert into DemoTable values(1000,'Adam','Smith');
mysql> insert into DemoTable values(1000,'John','Doe');
mysql> insert into DemoTable values(1000,'David','Miller');

Hiển thị dữ liệu gốc:

mysql> select * from DemoTable;

Kết quả:

+-----------+------------------+-----------------+
| StudentId | StudentFirstName | StudentLastName |
+-----------+------------------+-----------------+
| 1000      | Adam             | Smith           |
| 1000      | John             | Doe             |
| 1000      | David            | Miller          |
+-----------+------------------+-----------------+

Truy vấn GROUP_CONCAT theo StudentId

mysql> select StudentId,
    group_concat(StudentFirstName),
    group_concat(StudentLastName) 
from DemoTable group by StudentId;

Kết quả:

+-----------+--------------------------------+-------------------------------+
| StudentId | group_concat(StudentFirstName) | group_concat(StudentLastName) |
+-----------+--------------------------------+-------------------------------+
| 1000      | Adam,John,David                | Smith,Doe,Miller              |
+-----------+--------------------------------+-------------------------------+

Giải thích:

  • GROUP BY StudentId: Nhóm 3 hàng thành 1 nhóm
  • GROUP_CONCAT(StudentFirstName): Nối tên đầu: "Adam,John,David"
  • GROUP_CONCAT(StudentLastName): Nối tên cuối: "Smith,Doe,Miller"
  • Mặc định phân cách bằng dấu phẩy, có thể tùy chỉnh: GROUP_CONCAT(col SEPARATOR '; ')

Lưu ý: Độ dài mặc định của GROUP_CONCAT là 1024 ký tự (biến group_concat_max_len). Với dữ liệu lớn, cần tăng giá trị này: SET SESSION group_concat_max_len = 1000000;