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

Nối dữ liệu nhiều dòng với GROUP_CONCAT() trong MySQL

Mục đích

Gom nhiều dòng thành 1 chuỗi, ngăn cách bởi delimiter tùy chọn.

Ví dụ cơ bản

Tạo bảng và dữ liệu:

CREATE TABLE DemoTable (CountryName VARCHAR(100));
INSERT INTO DemoTable VALUES ('US'), ('AUS'), ('UK');

Tạo Stored Procedure có tham số IN/OUT:

DELIMITER //
CREATE PROCEDURE searchDemo(IN stringValue VARCHAR(255), OUT output TEXT)
BEGIN
    SELECT GROUP_CONCAT(DISTINCT CountryName ORDER BY CountryName)
    INTO output
    FROM DemoTable
    WHERE CountryName LIKE stringValue;
END //
DELIMITER ;

Gọi procedure:

CALL searchDemo('U%', @output);
SELECT @output;

Kết quả:

+---------+
| @output |
+---------+
| UK,US   |
+---------+

Các tùy chọn GROUP_CONCAT

GROUP_CONCAT(
    [DISTINCT] bieu_thuc
    [ORDER BY ...]
    [SEPARATOR 'ky_tu_ngan_cach']
)
  • DISTINCT: Loại bỏ trùng lặp.
  • ORDER BY: Sắp xếp trước khi nối.
  • SEPARATOR: Mặc định là dấu phẩy ','.

Lưu ý quan trọng

  • Giới hạn độ dài: Mặc định 1024 bytes (group_concat_max_len system variable). Cần tăng nếu dữ liệu lớn: SET SESSION group_concat_max_len = 1000000;.
  • NULL values: Bị bỏ qua tự động.
  • NULL result: Nếu không có dòng nào, trả về NULL (không phải chuỗi rỗng).

Ứng dụng thực tế

  • Tạo danh sách tag, category cho bài viết.
  • Export CSV từ database.
  • Build dynamic IN clause cho query khác.
  • Reporting: gom email, phone numbers...