【问题标题】:SQL (maybe basic) - QUERY with 3 tablesSQL(也许是基本的) - 带有 3 个表的 QUERY
【发布时间】:2016-11-08 22:09:05
【问题描述】:

我有这张桌子:

  • 学生(姓名、学生编号)- 学生表
  • Enrollments (enrollmentNumber, studentNumber, subject) - 包含学生已注册科目的表格
  • Grades (studentNumber, subject, grade) - 包含测试成绩的表格

我有这个任务:

编写一条返回学生姓名、注册科目和学生成绩的 SQL 指令 在题目中获得。 SQL 指令还应该返回注册了 科目并且没有参加该科目的考试(在这种情况下,学生将出席 在 Enrollments 表中,但不在 Grades 表中)。

我开发了这个查询:

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,因为没有显示没有成绩的注册(这是有道理的)...谁能帮我解决这个问题?

【问题讨论】:

  • 尝试将第二个 LEFT JOIN 改为学生表
  • 查询正在运行,但没有按预期工作,我真的希望当该注册+学生编号没有成绩时,注册行会出现在输出中

标签: mysql sql


【解决方案1】:

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

    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

【讨论】:

  • 谢谢!这非常完美!我不相信我离得这么近! :D
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2021-08-21
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多