MySQL使用join和数组匹配

时间:2019-07-20 07:55:38

标签: mysql arrays

正在尝试从表中选择所有student并将其与staff表合并,其中学生current_classstaff staff_classes的数组列表中。 我在下面的查询中进行了尝试,但是当我在选定的工作人员staff_classes中拥有多个记录时,它仅显示一条记录。请任何想法如何使它工作。

school_staffs

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班级人员的所有学生。

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 

假设当前登录的工作人员为peter123staff_classesA,B

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

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

1 个答案:

答案 0 :(得分:0)

您还需要在student_id中添加group_by

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_classes列包含多个逗号分隔值。单值也可以。

MySql Fiddle