我试图写一个查询,该查询返回学校名称,付款年份,付款成本以及付款年份的学生人数。 我遇到的问题是,某一年有0名学生,所以虽然有付款,但查询并没有返回任何一行。
这是我试过的:
SELECT School.NAME,
Payment.year,
Payment.amount,
Count(Student.id_stud) AS 'nb stud'
FROM School
LEFT JOIN Student
ON school.id_school = Student.id_school
LEFT JOIN Payment
ON School.id_school = Payment.id_School
WHERE Year(Student.date_in) <= Payment.year
GROUP BY School.NAME,
Payment.amount,
Payment.year
即使COUNT(Student.id_stud)为0,我也希望显示每一行。 我认为问题出在WHERE子句中。
答案 0 :(得分:2)
将Year(Student.date_in)
过滤器移至ON
条件
SELECT School.NAME,
Payment.year,
Payment.amount,
Count(Student.id_stud) AS 'nb stud'
FROM School
LEFT JOIN Student
ON school.id_school = Student.id_school
LEFT JOIN Payment
ON School.id_school = Payment.id_School
AND Year(Student.date_in) <= Payment.year
GROUP BY School.NAME,
Payment.amount,
Payment.year
您在Year(Student.date_in)
子句中过滤Where
的位置,因为不匹配的Student.date_in
会有NULL
个值。这些NULL
值将按where
条件进行过滤。因此,将过滤器移动到ON
子句,它会告诉要连接的记录是什么,而不是过滤结果。同样的逻辑也适用于Payment.year
。
答案 1 :(得分:1)
可能有两个原因导致没有任何结果 1.比较中使用的字段值为空 2.有连接,所以有可能没有学生或付款的匹配记录,所以如果在那里条件使用那么必须有匹配的记录。您可以尝试下面检查空值的查询。
- include: ssl_pull.yml
when: "'renewal' in ACTIONS"