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

标签 mysql join where-clause

我的数据库在使用 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/

相关文章:

php - 批处理未插入到表中

sql - 在 JOIN 中获得最高结果

php - mysql 2 SELECT 在一个查询中

SQL Server : removing duplicate column while joining tables

SQL连接问题

Mysql 查询不适用于 WHERE BETWEEN

mysql - 我有一个 mysql 查询,我试图同时添加一个计数和一个 WHERE 子句

mysql - 有没有其他方法可以在 Sql 中使用 Alias?

MySQL Case 语句(if else if equivalent)

python - “caching_sha2_password”插件在 Windows 上失败