加入三个表mysql时出现空结果

时间:2015-11-09 10:43:56

标签: mysql

大家好我有以下查询

SELECT MAX(s.nextPass), st.ID, st.fio 
FROM recomission s 
JOIN recomission_to_student b 
     ON s.ID = b.recomission_id 
JOIN student st 
     ON  b.student_id = st.id 
JOIN education_to_student e 
     ON s.ID = e.education_id 
JOIN education ed 
     ON  e.student_id = ed.id 
WHERE s.nextPass BETWEEN  '2015-11-09' AND  '2016-02-09'
GROUP BY st.fio

表格是:重新组合,学生和教育他们使用桥牌表lide recomission_to_student,education_to student。查询工作正常,直到我尝试从教育表中获取detamant然后我执行查询返回null。我知道我在某个接近命运的地方,但仍然无法弄清楚要做什么。

现在尝试使用子查询而不是连接

来绕过问题
SELECT MAX(s.nextPass), st.ID, st.fio 
FROM recomission s 
JOIN recomission_to_student b 
     ON s.ID = b.recomission_id 
JOIN student st 
     ON  b.student_id = st.id 

WHERE (select education_id where student_id=st.ID) and  s.nextPass BETWEEN  '2015-11-09' AND  '2016-02-09'

并收到以下错误 您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' where student_id = st.ID)附近使用正确的语法。在第8行

3 个答案:

答案 0 :(得分:0)

仅在重新组合表上运行查询,如果收到结果,可能表示表之间的连接存在问题

SELECT MAX(s.nextPass) , st.fio 
FROM recomission s 
WHERE s.nextPass

BETWEEN  '2015-11-09'
AND  '2016-02-09'
GROUP BY st.fio

答案 1 :(得分:0)

您的查询在分组方面有错误。你选择MAX(s.nextPass)和st.fio就可以了,因为MAX是一个组函数(聚合函数),并且在组中提到了st.fio。

但是st.ID既不是组功能,也不是组中提到的。因此,您的查询应该返回错误。由于此错误可能导致null(尽管通常我会期望在那里出现错误消息)。

^((?!Hello World).)*$

因此,您可以将组更改为:

GROUP BY st.fio,st.id

或从选择中删除SELECT MAX(s.nextPass) ,st.ID, st.fio FROM recomission s JOIN recomission_to_student b ON s.ID = b.recomission_id JOIN student st ON b.student_id = st.id JOIN education_to_student e ON s.ID = e.education_id JOIN education ed ON e.student_id = ed.id WHERE s.nextPass BETWEEN '2015-11-09' AND '2016-02-09' GROUP BY st.fio

答案 2 :(得分:0)

你的桌子:

s, b, st, e, ed

这些表格有s=b, b=sts=e, e=ed这个等式。

你必须检查这个等式,你确定s.nextpass between '2015-11-09' and '2016-02-09'这个条件,也许没有记录?