2013-02-26 53 views
0

我的數據庫有一個小問題,那就是使用SQL查詢獲取結果。 我有5個表格,我想加入特定的連接以獲取有關它的所有信息。 還有就是我的表:加入多個表的Mysql,where子句問題

教訓

  • 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)

事實是,我的課程可以有多個老師,所以我在他們兩個之間建立了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' 

回答

3

WHERE子句導致您LEFT JOINclasses表現得像一個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' 
+0

我的教訓改變賽道,是我不好,對不起:) – Simon 2013-02-26 21:00:54

+0

@Simon只要你瞭解每列屬於什麼都沒問題。 :)我編輯了我的答案,用課程替換了'cours',希望這是正確的。 – Taryn 2013-02-26 21:01:41

+0

它不會將LEFT JOIN更改爲INNER JOIN,它只是將相同的結果強制爲INNER JOIN,但需要付出更多努力。 – symcbean 2013-02-26 21:02:22