Mysql连接多个表,where子句问题

Mysql连接多个表,where子句问题,mysql,join,where-clause,Mysql,Join,Where Clause,关于使用SQL查询获取结果,我的数据库有点问题。 我有5个表,我想加入特定的连接,以获得有关它的所有信息。 这是我的桌子: 课程 id(int) 课程名称(varchar) id_类(int) id_段(内部) 教师 id(int) 名称(varchar) 第一课\u老师 id(int) id_课程(int) 身份证教师(国际) 课程 id(int) 类别(varchar) 章节 id(int) 部分(varchar) 事实上,我的课可以有多个老师,所以我在他们两个之间建立了

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

课程

  • id(int)
  • 课程名称(varchar)
  • id_类(int)
  • id_段(内部)
教师

  • id(int)
  • 名称(varchar)
第一课\u老师

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


WHERE
子句导致
classes
上的
LEFT JOIN
内部JOIN
一样工作,这可能不是您想要的行为

尝试将
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 
  AND classes.classe = 'BMMP33'

WHERE
子句导致
classes
上的
LEFT JOIN
内部JOIN
一样工作,这可能不是您想要的行为

尝试将
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 
  AND classes.classe = 'BMMP33'

我通过上课来改变课程,我的坏,对不起:)@Simon没问题,只要你了解每一列的内容。:)我编辑了我的答案,用lesson替换了
课程
,希望这是正确的。它不会将左连接更改为内部连接,它只是强制执行与内部连接相同的结果,但需要付出更多的努力。使用您的解决方案,它返回所有数据,即使是不是来自“BMMP33”和my columns classes.classe的数据NULL@Simon我很高兴你找到了答案。:)我通过上课来改变课程,我的坏,对不起:)@Simon没问题,只要你了解每一列的内容。:)我编辑了我的答案,用lesson替换了
课程
,希望这是正确的。它不会将左连接更改为内部连接,它只是强制执行与内部连接相同的结果,但需要付出更多的努力。使用您的解决方案,它返回所有数据,即使是不是来自“BMMP33”和my columns classes.classe的数据NULL@Simon我很高兴你找到了答案。:)