【发布时间】:2016-04-05 20:37:40
【问题描述】:
我正在使用 MySQL。 我有 3 个如下表。
表:subject_Master
--------------------------
subjectId | subjectShortName
----------------------------------
1 | English
2 | French
3 | German
4 | Latin
----------------------------------
表:class_Master
-----------------------------------
classId | className
----------------------------------
1 | Rose
2 | Dasy
3 | Lily
表:主题分配
------------------------------------------
allocationId | classId | subjectId
-------------------------------------------
1 | 1 | 1,2
2 | 2 | 2,3,4
3 | 3 | 1,2,3,4
我如何获得 SQL 结果如下,想要获取 subjectAllocation 行中每个 subjectId 的 SubjectName
ClassName | SubjectName
-------------------------------------------
Rose | English,French
Dasy | French,German,Latin
Lily | English,French,German,Latin
【问题讨论】:
-
首先修复subjectAllocation的数据结构。请参阅 previous questions answer 了解如何对其进行规范化
-
subjectAllocation 的数据结构有什么问题?
-
它存储可变长度的字符串数组而不是可访问的数据。这就是您无法获得所需输出的原因。阅读junction tables(也称为链接表)
-
是否可以为每个值循环数组以从 subjectMaster 获取它的 subjectName?你能建议数据结构应该是什么吗?
-
数据结构应该是
subjectAllocation { allocationId integer PK, classID integer FK, subjectID integer FK }。 subjectID 现在是一个整数,可以访问和链接到它的实际主题,而不是一个不可访问的字符串列表。你必须做一些预处理(如上面链接的帖子)才能把它变成这个可用的形式
标签: mysql sql select group-concat find-in-set