[英]MYSQL comma base separated select result
我有4张桌子,如下所示。
表: 类
ClassID | ClassSTD
--------------------------------
1 | STD-1<br>
2 | STD-2
表: 部分
SectionId | SectionName | ClassId
--------------------------------------------
1 | sec-A | 1
2 | sec-B | 1
3 | sec-C | 1
4 | sec-A | 2
5 | sec-B | 2
6 | sec-C | 2
表: 主题
subjectId | subjectName
------------------------------------
1 | Art
2 | Music
3 | Play
表SubjectAllocationToClass
classId | sectionID | subjectId | type
-----------------------------------------------------------------------
1(STD-1) | 1(sec-A) | 1(Art) | main
1(STD-1) | 2(sec-B) | 1(Art) | main
1(STD-1) | 3(sec-C) | 1(Art) | optional
1(STD-1) | 1(sec-A) | 2(Music) | main
1(STD-1) | 2(sec-B) | 2(Music) | optional
上表“ SubjectAllocationToClass”显示了将两种类型的主题(主主题和可选主题)分配给类的各个部分。 我如何从SELECT语句中实现以下结果?
classSTD | sectionName | Main subjectName | Optional subjectName
-----------------------------------------------------------------------------
STD-1 | sec-A | Art, Music |
STD-1 | sec-B | Art | Music
STD-1 | sec-C | | Art
使用GROUP_CONCAT()函数:
尝试这个:
SELECT D.classSTD,
C.sectionName,
GROUP_CONCAT(B.subjectName SEPARATOR ', ') AS subjectName
FROM SubjectAllocationToClass A
INNER JOIN Subject B ON A.subjectId = B.SubjectId
INNER JOIN Section C ON A.sectionId = C.SectionId
INNER JOIN Class D ON A.classID = D.ClassID
GROUP BY D.ClassID, C.SectionId;
还有一个问题
SELECT D.classSTD,
C.sectionName,
GROUP_CONCAT(B.subjectName SEPARATOR ', ') AS subjectName,
GROUP_CONCAT(CASE WHEN B.type = 'main' THEN B.subjectName ELSE NULL END SEPARATOR ', ') AS mainsubjectName,
GROUP_CONCAT(CASE WHEN B.type = 'optional' THEN B.subjectName ELSE NULL END SEPARATOR ', ') AS optionalSubjectName
FROM SubjectAllocationToClass A
INNER JOIN SUBJECT B ON A.subjectId = B.SubjectId
INNER JOIN Section C ON A.sectionId = C.SectionId
INNER JOIN Class D ON A.classID = D.ClassID
GROUP BY D.ClassID, C.SectionId;
您可以像这样通过group_concat
来做到这一点:
select classSTD , SectionName , group_concat(`subjectName` separator ',') as `subjectName`
FROM SubjectAllocationToClass
INNER JOIN Class ON SubjectAllocationToClass.classId = Class.ClassID
INNER JOIN Section ON SubjectAllocationToClass.sectionID = Section.sectionId
INNER JOIN Subject ON SubjectAllocationToClass.subjectID = Subject .subjectId
GROUP BY SubjectAllocationToClass.subjectID ;
使用GROUP_CONCAT
SELECT sec.SectionName , cl.classSTD, GROUP_CONCAT(`sub.subjectName`) as `subjectName` FROM SubjectAllocationToClass AS al JOIN Class AS cl ON al.classId = cl.ClassID JOIN Section AS sec ON al.sectionID = sec.sectionId JOIN Subject AS sub ON al.subjectID = sub.subjectId
GROUP BY al.subjectID;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.