使用连接和数组内匹配的Mysql
我试图从表中选择所有使用连接和数组内匹配的Mysql,mysql,arrays,Mysql,Arrays,我试图从表中选择所有学生,并将其与职员表联接,其中学生当前的班级位于职员的数组列表中。 我尝试了下面的查询,但当我在所选的staffstaff\u类中有多条记录时,它只显示一条记录。请告诉我如何让它工作 学校教职员 staff_id | staff_classes | staff_name --------------|-----------------|--------------------------- peter123 | A,B | Pe
学生
,并将其与职员
表联接,其中学生当前的班级位于职员
的数组列表中。
我尝试了下面的查询,但当我在所选的staffstaff\u类中有多条记录时,它只显示一条记录。请告诉我如何让它工作
学校教职员
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
我目前的尝试。
我在下面实际要做的是列出管理A
和B
课程的员工手下的所有学生
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\u类是A、B
上述查询的预期结果为:-
student_id | current_class | student_name
---------------|-------------------|---------------------------
john123 | A | John
paul123 | A | Paul
dev123 | B | Dev
您还需要在groupby
中添加student\u 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;
注意:确保staff\u classes
列包含多个逗号分隔的值。单值也可以
.您还需要在分组人中添加学生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;
注意:确保staff\u classes
列包含多个逗号分隔的值。单值也可以
.您可以添加预期的输出吗?请注意,像这样存储CSV不是理想的数据库设计。您可以添加预期的输出吗?请注意,像这样存储CSV并不是理想的数据库设计。