0

SQLクエリで結果を取得することに関してデータベースに少し問題があります。特定の結合で結合して、それに関するすべての情報を取得したい5つのテーブルがあります。私のテーブルがあります:

レッスン

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

教師

  • id(int)
  • 名前(varchar)

lesson_teacher

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

クラス

  • id(int)
  • classe(varchar)

セクション

  • id(int)
  • セクション(varchar)

実のところ、私のレッスンには複数の教師がいる可能性があるため、2人の間に1-nの関係テーブルを作成しました。

レッスンごとにクラスとセクションが1つしかないため、新しいテーブルとのリンクを作成する必要はありません。

私のやり方は良いと思います。データベースで情報を選択すると、「WHERE」句を使用して1つ以上のパラメーターを指定する場合を除いて、すべて問題ありません。

これが私の質問です:

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'
4

1 に答える 1

3

このWHERE句により、LEFT JOINonは、おそらくあなたが望む動作ではない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'
于 2013-02-26T20:53:57.110 に答える