Bạn có thể sử dụng FIND_IN_SET()
và GROUP_CONCAT()
về điều này,
SELECT b.Group_ID, GROUP_CONCAT(a.name) name
FROM Table2 b
INNER JOIN Table1 a
ON FIND_IN_SET(a.ID, b.Group_ID) > 0
GROUP BY b.Group_ID
ĐẦU RA
╔══════════╦═════════════════╗
║ GROUP_ID ║ NAME ║
╠══════════╬═════════════════╣
║ 1 ║ Person1 ║
║ 2,3 ║ Person2,Person3 ║
╚══════════╩═════════════════╝
Là một chú thích phụ, truy vấn này có thể không hoạt động hiệu quả như mong đợi. Vui lòng chuẩn hóa bảng của bạn đúng cách bằng cách không lưu các giá trị được phân tách bằng dấu phẩy.
CẬP NHẬT
GROUP_ID
là khá nhiều khó hiểu. Phải không PersonIDList
? Dù sao, đây là thiết kế giản đồ được đề xuất của tôi:
Bảng PERSON
- ID người (PK)
- Tên người
- các cột khác ..
Bảng NHÓM
- GroupID (PK)
- Tên nhóm
- các cột khác ..
Bảng PERSON_GROUP
- PersonID (FK) (đồng thời PK với cột GroupID)
- GroupID (FK)