我有两张表,类似于下表1和表1。表2.我想要类似于表3
Table 1
ParticipantsId | Description | Duration
1,2 Demo 60 mins
1 Test 25 mins
1,2,3,4 Alpha 30 mins
4,5,6,2 MCQ 120 mins
表2
UserId | Name | Age
1 Aku 21
2 Greg 18
3 Denver 24
4 Mike 22
5 Sid 24
6 Sriten 19
我希望out out是
表3
users | Description | Duration
Aku,Greg Demo 60
Aku Test 25
Aku,Greg,Denver,Mike Alpha 30
Mike,Sid,Sriten,Greg MCQ 120
我已尝试过find_by_set,群组和其他各种可能性,但我无法获得所需的结果,请帮忙
答案 0 :(得分:4)
您可以同时使用GROUP_CONCAT()
和FIND_IN_SET()
:
SELECT
GROUP_CONCAT(t2.`name`) AS users,
t1.Description,
CAST(t1.Duration AS UNSIGNED) AS Duration
FROM
table1 t1,
table2 t2
WHERE
FIND_IN_SET(t2.userID, t1.ParticipantsId)
GROUP BY
t1.Description,
CAST(t1.Duration AS UNSIGNED)
结果是:
+----------------------+-------------+----------+
| users | Description | Duration |
+----------------------+-------------+----------+
| Greg,Denver,Aku,Mike | Alpha | 30 |
| Greg,Aku | Demo | 60 |
| Greg,Mike,Sid,Sriten | MCQ | 120 |
| Aku | Test | 25 |
+----------------------+-------------+----------+
4 rows in set
但是你必须考虑数据结构的规范化,逗号分隔值是一种不好的做法,正如之前提到的那样。