Mysql加入多个表,where子句问题

时间:2013-02-26 20:51:50

标签: mysql join where-clause

我的数据库有一个关于使用SQL查询获取结果的问题。 我有5个表,我想加入特定的连接,以获取有关它的所有信息。 有我的表:

教训

  • id(int)
  • lesson_name(varchar)
  • id_class(int)
  • id_section(int)

教师

  • id(int)
  • name(varchar)

lesson_teacher

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

  • id(int)
  • classe(varchar)

部分

  • id(int)
  • section(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”子句时,我的回归中没有行? 例如:

WHERE classes.classe = 'BMMP33'

1 个答案:

答案 0 :(得分:3)

WHERE子句导致LEFT JOIN上的classes行为像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'