MySQL 一起使用 GROUP CONCAT 和 FIND_IN_SET

标签 mysql

我有 MySQL 数据库,其中有 3 个表,如下所示

表:subject_master

-----------------------
subjectId   |   subjectName
--------------------------------------
1           |   English
2           |   German
3           |   French
4           |   Spanish

表:class_Master

----------------------------------
classId     | className
---------------------------------------
1           |   Alpha
2           |   Beta
3           |   Gama
4           |   laser

表:subjectAllocation

-------------------------------------------------------
allocationId    |   classId         | subjectId     
------------------------------------------------------
1               |   1(Alpha)        |   1,2,3
2               |   2 (Beta)        |   2,3
3               |   4 (laser)       |   4,2,1

如何获取每个主题的类名列表

subjectName     |   classNames
-------------------------------------
English         |   Alpha, laser
German          |   Alpha, Beta, laser
French          |   Beta,Gama
Spanish         |   laser

我学习了 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

最佳答案

您应该在 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

关于MySQL 一起使用 GROUP CONCAT 和 FIND_IN_SET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682534/

相关文章:

MySQL 重用函数返回的值

mysql - 同一个表上的多个连接在一个查询中计数

php - xamps 上的 MySQL 服务运行,然后在几秒钟后停止

java - 无法为连接 URL 创建类 'com.mysql.jdbc.Driver' 的 JDBC 驱动程序

c# - 如何使用mysql命令条件语句在 Crystal 报表中显示数据?

PHP/MySQL 日期/时间差异

java - 使用 hibernate 将 XML 保存到 mysql

python - 使用 MySQLdb 向表中插入行时出错

mysql,utf-8 列 : how to select only case-sensitive?

mysql - 在登记处检查行程容量