Mysql使用连接和数组匹配

标签 mysql arrays

我正在尝试从表中选择所有 student 并将其与 staff 表连接,其中学生 current_class 的数组列表中员工 staff_classes。 我试过下面的查询,但当我在选定的员工 staff_classes 中有多个记录时,它只显示一个记录。请知道如何让它工作。

学校员工

staff_id      | staff_classes   | staff_name
--------------|-----------------|---------------------------
peter123      | A,B             | Peter
fara123       | A               | Fara

学生

student_id     |  current_class    | student_name
---------------|-------------------|----------------
john123        | A                 |  John
paul123        | A                 | Paul
dev123         | B                 | Dev
heg123         | C                 | Heg
mag123         | C                 | Mag

我目前的尝试。 下面我实际要做的是列出管理 AB 类(class)的所有学生。

SELECT st.student_name, st.student_id, 
GROUP_CONCAT(st.student_id ORDER BY FIND_IN_SET(st.current_class , 'A,B'))
FROM students AS st
JOIN school_staffs AS stf ON FIND_IN_SET(st.current_class , 'A,B') > 0
GROUP BY st.current_class 

假设当前登录的员工是 peter123 并且 staff_classesA,B

上述查询的预期结果是:-

student_id     |  current_class    | student_name
---------------|-------------------|---------------------------
john123        | A                 |  John
paul123        | A                 | Paul
dev123         | B                 | Dev

最佳答案

您还需要在group_by中添加student_id

SELECT s.*, ss.staff_name FROM `students` AS s, `school_staffs` AS ss
WHERE FIND_IN_SET(s.current_class, ss.staff_classes)
GROUP BY s.current_class, s.student_id;

Note : Make sure staff_classes column contains comma separated values for multiple. It is okay for single value.

MySql Fiddle .

关于Mysql使用连接和数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122824/

相关文章:

mysql - 如何将openstreetmap数据放入我的mysql数据库中?

mysql - 使用 Grails 连接到 UTF-8 MySQL 数据库

php - 从嵌套数组输出项目

java - 提高反转数组的性能

c - 数组不会使用指针在 C 中反向打印

javascript - 在使用 Angular 将项目添加到数组之前,如何检查它是否已经在数组中?

SQL Server 相当于 MySQL 的 USING

sql - mysql group by 和 count 行数问题

MySQL 在没有 WHERE 的情况下删除后自动增加值

javascript - 如何根据条件从数组中删除重复元素?