Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi có thể nối nhiều hàng MySQL vào một trường không?

Bạn có thể sử dụng GROUP_CONCAT :

SELECT person_id,
   GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Như Ludwig đã nêu trong của anh ấy bình luận, bạn có thể thêm DISTINCT toán tử để tránh trùng lặp:

SELECT person_id,
   GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Như Jan đã nêu trong của họ bình luận, bạn cũng có thể sắp xếp các giá trị trước khi mã hóa nó bằng cách sử dụng ORDER BY :

SELECT person_id, 
       GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Như Dag đã nêu trong nhận xét của anh ấy, có giới hạn 1024 byte trên kết quả. Để giải quyết vấn đề này, hãy chạy truy vấn này trước truy vấn của bạn:

SET group_concat_max_len = 2048;

Tất nhiên, bạn có thể thay đổi 2048 theo nhu cầu của bạn. Để tính toán và gán giá trị:

SET group_concat_max_len = CAST(
                     (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
                           FROM peoples_hobbies
                           GROUP BY person_id) AS UNSIGNED);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server tương đương ELT () trong MySQL là gì?

  2. Cách tính giá trị trung bình trong MySQL

  3. Khái niệm cơ bản về khóa ngoại trong MySQL?

  4. Làm việc với Cơ sở dữ liệu MySQL cPanel

  5. LỖI:Tính năng tải dữ liệu cục bộ bị tắt - tính năng này phải được bật ở cả phía máy khách và máy chủ