MySQL Select 查询以根据列表值获取记录

标签 mysql sql select group-concat find-in-set

我正在使用 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

最佳答案

使用FIND_IN_SET()功能:

试试这个:

SELECT A.allocationId, 
       B.className, 
       GROUP_CONCAT(C.subjectShortName) AS subjectName
FROM subjectAllocation A
INNER JOIN class_Master B ON A.classId = B.classId 
INNER JOIN subject_Master C ON FIND_IN_SET(C.subjectId, A.subjectId) 
GROUP BY A.allocationId;

关于MySQL Select 查询以根据列表值获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553775/

相关文章:

mysql - FROM 后面的第二个词在 MySQL 查询中是什么意思?

MySQL:搜索术语应考虑 float 的点和逗号

MySQL 多次停止返回子字符串中的最后一项

mysql - 关系模式 : (0, 1) 到 (0,1) 与属性的关系 - 创建一个新表?

c# - linq 查询 - 获取父实体,其中至少一个子实体是列表的一部分

php - 当有数千个条目时如何加快数据库查询

php - 如何在下拉框中设置选中项

mysql - SQL 仅选择列上具有最大值的行

javascript - 如何使用自定义外观列表隐藏列表下拉列表中的选择占位符

jquery - 只选择第三里