首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL逗号基分隔选择结果

MYSQL逗号基分隔选择结果
EN

Stack Overflow用户
提问于 2015-12-28 12:29:31
回答 3查看 35关注 0票数 0

我有四张桌子,如下所示。

表:

代码语言:javascript
复制
ClassID     |   ClassSTD
--------------------------------
1           |   STD-1<br>
2           |   STD-2

表:

代码语言:javascript
复制
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

表:Subject

代码语言:javascript
复制
subjectId   |   subjectName
------------------------------------
1           |   Art
2           |   Music
3           |   Play

SubjectAllocationToClass

代码语言:javascript
复制
    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语句中获得以下结果?

代码语言:javascript
复制
classSTD |  sectionName | Main subjectName   | Optional subjectName
-----------------------------------------------------------------------------
STD-1    |  sec-A       | Art, Music         |
STD-1    |  sec-B       | Art                |  Music
STD-1    |  sec-C       |                    |  Art
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-28 12:38:44

使用GROUP_CONCAT()函数:

试试这个:

代码语言:javascript
复制
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;

回答你的另一个问题

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2015-12-28 12:39:13

您可以通过group_concat这样做:

代码语言:javascript
复制
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 ;
票数 1
EN

Stack Overflow用户

发布于 2015-12-28 12:45:57

使用GROUP_CONCAT

代码语言:javascript
复制
 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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34493575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档