【发布时间】:2016-01-05 09:01:34
【问题描述】:
我有 4 张桌子,如下所示。
表:类
ClassID | ClassSTD
--------------------------------
1 | STD-1
2 | STD-2
3 | STD-3
4 | STD-4
表格:部分
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
7 | sec-A | 3
表格:主题
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”显示了两种类型的主题(主要和可选)到班级部分的分布。
需要所有类,而不管部分或主题分配 无论subjectAllocation如何,都需要所有部分
我尝试让 Left JOIN,Right JOIN 但无法获得欲望。
如何从 SELECT 语句中获得以下结果?
classSTD | sectionName | Main subjectName | Optional subjectName
------------------------------------------------------------------------
STD-1 | sec-A | Art, Music |
STD-1 | sec-B | Art | Music
STD-1 | sec-C | | Art
STD-2 | | |
STD-3 | sec-A | |
STD-4 | | |
select
ClassSTD as ClassSTD,
sectionname AS SectionName,
COALESCE(GROUP_CONCAT(CASE WHEN sac.type = 'main' THEN subjectName END), '') as 'Main subjectname',
COALESCE(GROUP_CONCAT(CASE WHEN sac.type = 'optional' THEN subjectName END), '') as 'Optional subjectname'
FROM SubjectAllocationToClass sac
JOIN Class c ON c.classid = sac.classid
Left JOIN Section sc ON sc.sectionid = sac.sectionid
Left JOIN Subject sj ON sj.subjectid = sac.subjectid
GROUP BY ClassSTD, SectionName;
【问题讨论】:
-
你得到的输出是什么
-
添加到上面的编辑帖中
-
创建一个 sqlfiddle 以获得快速帮助。
标签: mysql sql select join left-join