从多个表中检索正确的数据

时间:2017-03-20 16:09:02

标签: mysql sql join

我有学生报告管理系统

在系统中有4个表格;

  1. 学生表存储学生姓名,学生ID等学生信息。

  2. 标记表格,用于存储每个科目中每个学生的分数,此表格链接到下表;

    学生表 - >(student_id),科目表 - >(subject_id),班级表 - >(class_table)和教师表 - >(teacher_id)

  3. 标记表格表如下所示:

     table structure

    我希望能够从链接表中检索数据,然后对于mark_1,我想为该特定主题检索学生的标记。

    我目前有这段代码,它的作用是,即使学生在历史中得到78%,78%将出现在孩子正在做的所有科目中,即使孩子没有得到78%

    SELECT 
        DISTINCT(marks.test_1),
        students.id,
        students.student_id,
        students.student_name,
        subjects.subject_name,
        forms.form_name,
        teacherxsubject.form_id,
        students.class,
        teacherxsubject.subject_id,
        teacherxsubject.teacher_id
    FROM
        students
    LEFT JOIN
        marks ON students.student_id = marks.student_id
    LEFT JOIN
        teacherxsubject ON students.class = teacherxsubject.form_id
    INNER JOIN
        subjects ON subjects.subject_id = teacherxsubject.subject_id
    LEFT JOIN
        forms ON forms.form_id = teacherxsubject.form_id
    LEFT JOIN 
        marks a ON marks.subject_id=subjects.subject_id
    WHERE 
        teacherxsubject.teacher_id = 1200717 
        AND students.class = 6
    

    以下是查询返回的示例:

    What the query returns

1 个答案:

答案 0 :(得分:0)

你加入标记表两次......

LEFT JOIN
marks ON students.student_id = marks.student_id

首先关于学生ID,导致该学生的所有分数,然后

LEFT JOIN 
marks a ON marks.subject_id=subjects.subject_id

然后在subjectid上,导致该主题的所有分数(对所有学生而言)......

您将在一个连接中同时想要两个;

LEFT JOIN
marks ON students.student_id = marks.student_id
AND marks.subject_id=subjects.subject_id

P.S。您的数据类型是什么?你有一个200个字符的字符串,2 x 10个字符串和一个int ...