复杂的mysql加入学生列表

时间:2012-08-29 10:22:06

标签: php mysql

我的查询存在此问题。查询的目标是显示所有学生,无论他们是否在aanweezigheid表中。

这是我的疑问:

SELECT 
   s.studentNaam
   , s.studentAchterNaam
   , s.studentStamNummer
   , s.klasID
   , k.klasNaam
   , k.klasID
   , a.studentID
   , a.aanwezigTijdAan
   , a.aanwezigTijdAf
   , a.aanwezigDag
   , a.aanwezigStatus 

FROM studenten AS s 
   LEFT JOIN klassen AS k ON s.klasID=k.klasID 
   LEFT JOIN aanweezigheid AS a ON a.studentID=s.studentID
WHERE k.klasNaam = 'MD2a' 
   AND a.aanwezigDag='2012-08-28'
ORDER BY s.studentAchterNaam ASC

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

WHERE条件移至LEFT JOIN ON子句:

SELECT ...
FROM studenten AS s
   LEFT JOIN klassen AS k
      ON s.klasID=k.klasID
         AND k.klasNaam = 'MD2a'
   LEFT JOIN aanweezigheid AS a
      ON a.studentID=s.studentID
         AND a.aanwezigDag='2012-08-28'
ORDER BY s.studentAchterNaam ASC;

答案 1 :(得分:0)

将您的"a"依赖关系移至ON字词。这样您就不会在WHERE中过滤掉任何内容:

SELECT 
   s.studentNaam
   , s.studentAchterNaam
   , s.studentStamNummer
   , s.klasID
   , k.klasNaam
   , k.klasID
   , a.studentID
   , a.aanwezigTijdAan
   , a.aanwezigTijdAf
   , a.aanwezigDag
   , a.aanwezigStatus 

FROM studenten AS s 
   LEFT JOIN klassen AS k ON s.klasID=k.klasID 
   LEFT JOIN aanweezigheid AS a ON a.studentID=s.studentID
              AND a.aanwezigDag='2012-08-28'
WHERE k.klasNaam = 'MD2a' 

ORDER BY s.studentAchterNaam ASC