我的数据库在使用 SQL 查询获取结果时遇到了一点问题。 我有 5 个表,我想通过特定的连接来连接以获取有关它的所有信息。 这是我的 table :
类(class)
- id(整数)
- 类(class)名称(可变字符)
- id_class (整数)
- id_section (int)
老师
- id(整数)
- 名称(可变字符)
lesson_teacher
- id(整数)
- id_lesson(整数)
- id_teacher (int)
类
- id(整数)
- 类(可变字符)
部分
- id(整数)
- 部分(varchar)
事实上,我的课可以有多个老师,所以我在他们两个之间制作了一个 1-n 关系表。
每节课只有一个类(class)和一个节,所以我不必与新表格建立链接。
我想我的做法不错。当我在数据库中选择信息时,一切正常,除非我想使用“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 列,我的类(class)显示得很好,一切正常。
为什么当我使用“WHERE”子句时,我的返回值中没有行? 例如:
WHERE classes.classe = 'BMMP33'
最佳答案
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'
关于Mysql连接多张表,where子句问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15099019/