大家好我有以下查询
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行
答案 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=st
和s=e, e=ed
这个等式。
你必须检查这个等式,你确定s.nextpass between '2015-11-09' and '2016-02-09'
这个条件,也许没有记录?