我有这张桌子:


学生(姓名,studentNumber)-学生表
入学人数(enrollmentNumber,studentNumber,学科)-包含该学生已入学学科的表
成绩(学生人数,科目,成绩)-包含考试成绩的表格


我有这个任务:


  编写一条SQL指令以返回学生的姓名,所注册的科目和学生的成绩
  在主题中获得。 SQL指令还应该返回注册了
  科目且未参加该科目的考试(在这种情况下,该学生将在场
  在“注册”表中,但不在“成绩”表中)。


我开发了此查询:

SELECT * FROM student s
    LEFT JOIN enrollments e ON s.studentNumber = e.studentNumber
    LEFT JOIN grades g ON e.studentNumber = g.studentNumber
    WHERE e.subject = g.subject


我知道错误出在最后一个WHERE,因为没有成绩的入学人数没有显示(这是有道理的)...有人可以帮我弄清楚这个吗?

最佳答案

移动
            “ e.subject = g.subject”
作为左侧联接的过滤器。当在外部联接上将过滤器用作where的一部分时,它实际上将其转换为INNER JOIN:

    SELECT * FROM student s
      LEFT JOIN enrollments e ON s.studentNumber = e.studentNumber
      LEFT JOIN grades g ON e.studentNumber = g.studentNumber
          AND e.subject = g.subject

关于mysql - SQL(也许是基本的)-具有3个表的QUERY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40497289/

10-11 09:14