[英]MySQL use of GROUP CONCAT and FIND_IN_SET together
I have MySQL DB with 3 tables as below 我有3表的MySQL数据库,如下所示
Table: subject_master
表: subject_master
-----------------------
subjectId | subjectName
--------------------------------------
1 | English
2 | German
3 | French
4 | Spanish
Table: class_Master
表: class_Master
----------------------------------
classId | className
---------------------------------------
1 | Alpha
2 | Beta
3 | Gama
4 | laser
Table: subjectAllocation
表: subjectAllocation
-------------------------------------------------------
allocationId | classId | subjectId
------------------------------------------------------
1 | 1(Alpha) | 1,2,3
2 | 2 (Beta) | 2,3
3 | 4 (laser) | 4,2,1
how to get list of className per subject wise 如何获取每个主题明智的className列表
subjectName | classNames
-------------------------------------
English | Alpha, laser
German | Alpha, Beta, laser
French | Beta,Gama
Spanish | laser
I learn, GROUP_CONCAT & FIND_IN_SET but not able to use then together as below 我学习了GROUP_CONCAT和FIND_IN_SET,但是不能一起使用,如下所示
SELECT
a.subjectName, FIND_IN_SET(c.className , (GROUP_CONCAT(b.classId))
FROM
subject_master a
LEFT JOIN subjectAllocation b ON a.subjectId = b.sectionId
LEFT JOIN class_master c ON b.classId = c.classId
GROUP BY a.subjectId
You should use FIND_IN_SET
in the ON
clause to match an element in a list, not in the SELECT
clause. 您应该在ON
子句中使用FIND_IN_SET
来匹配列表中而不是SELECT
子句中的元素。
SELECT a.subjectName, GROUP_CONCAT(c.className) AS classNames
FROM subject_master AS a
LEFT JOIN subjectAllocation AS b ON FIND_IN_SET(a.subjectId, b.subjectId)
LEFT JOIN class_Master AS c ON b.classId = c.classId
GROUP BY a.subjectId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.