【问题标题】:Mysql joining multiple table, where clause issuesMysql加入多个表,where子句问题
【发布时间】:2013-02-26 20:51:50
【问题描述】:

我的数据库在使用 SQL 查询获取结果时遇到了一点问题。 我有 5 个表,我想通过特定的连接来获取有关它的所有信息。 有我的桌子:

课程

  • id (int)
  • 课程名称(varchar)
  • id_class (int)
  • id_section (int)

教师

  • id (int)
  • 名称(varchar)

lesson_teacher

  • id (int)
  • id_lesson (int)
  • id_teacher (int)

  • id (int)
  • 类(varchar)

部分

  • id (int)
  • 部分(varchar)

事实上,我的课可以有不止一个老师,所以我在他们两个之间做了一个 1-n 关系表。

只有一节课和一节课,所以我不必与新表建立链接。

我想我的做法很好。当我在数据库中选择信息时,一切正常,除非我想使用“WHERE”子句来指定一个或多个参数。

这是我的查询:

SELECT teachers.name, lessons.lesson_name, classes.classe, sections.section FROM lesson_teacher
JOIN teachers ON lesson_teacher.id_teacher = teachers.id
JOIN lesson ON lesson_teacher.id_lesson = lessons.id
LEFT OUTER JOIN sections ON lesson.id_section = sections.id
LEFT OUTER JOIN classes ON lesson.id_classe = classes.id

我有 4 列包含所有数据,我的课程显示良好,一切正常。

为什么,当我使用“WHERE”子句时,我的 return 中没有行? 例如:

WHERE classes.classe = 'BMMP33'

【问题讨论】:

    标签: mysql join where-clause


    【解决方案1】:

    WHERE 子句导致classes 上的LEFT JOIN 表现得像INNER JOIN,这可能不是您想要的行为。

    尝试将WHERE 过滤器移动到JOIN

    SELECT teachers.name, 
      lessons.lesson_name, 
      classes.classe, 
      sections.section 
    FROM lesson_teacher
    JOIN teachers 
      ON lesson_teacher.id_teacher = teachers.id
    JOIN lesson 
      ON lesson_teacher.id_lesson = lessons.id
    LEFT OUTER JOIN sections 
      ON lesson.id_section = sections.id
    LEFT OUTER JOIN classes 
      ON lesson.id_classe = classes.id 
      AND classes.classe = 'BMMP33'
    

    【讨论】:

    • 我按课改课,我的错,对不起:)
    • @Simon 没问题,只要您了解每一列的内容。 :) 我编辑了我的答案,用课程替换了cours,希望这是正确的。
    • 它不会将 LEFT JOIN 更改为 INNER JOIN,它只会强制获得与 INNER JOIN 相同的结果,但需要更多的努力。
    • 使用您的解决方案,它会返回所有数据,即使不是来自 'BMMP33' 并且我的列 classes.classe 为 NULL
    • @Simon 很高兴你知道了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多