我正在使用以下JOIN语句:
SELECT *
FROM students2014
JOIN notes2014 ON (students2014.Student = notes2014.NoteStudent)
WHERE students2014.Consultant='$Consultant'
ORDER BY students2014.LastName
检索学生列表(students2014)以及存储在(notes2014)中的每个学生的相应注释。
每个学生在notes2014表格中都有多个笔记,每个笔记都有一个与每个学生的唯一ID相对应的ID。上述声明返回了学生列表,但复制了每个有多个笔记的学生。我只想显示每个学生的最新笔记(由最高笔记ID确定)。
这可能吗?
答案 0 :(得分:3)
您需要根据您从选择中获得的MAX noteId进行另一次加入。
这样的事情应该这样做(没有经过测试;下次我建议您将http://sqlfiddle.com/的链接粘贴到您的表格结构和一些示例数据中。
SELECT *
FROM students s
LEFT JOIN (
SELECT MAX(NoteId) max_id, NoteStudent
FROM notes
GROUP BY NoteStudent
) aux ON aux.NoteStudent = s.Student
LEFT JOIN notes n2 ON aux.max_id = n2.NoteId
如果我可以这么说,那个名为students2014的表是一个很大的代码味道。由于种种原因(只有几个:你不需要每年都改变你的数据库结构,多年来查询更多,更容易等等)你会更好地学习学生表和年份。 。也许你“继承”了这个,但我想我会提到它。
答案 1 :(得分:1)
通过studentId对查询进行分组并选择noteId的MAX
尝试:
SELECT
students2014.Student,
IFNULL(MAX(NoteId),0)
FROM students2014
LEFT JOIN notes2014 ON (students2014.Student = notes2014.NoteStudent)
WHERE students2014.Consultant='$Consultant'
GROUP BY students2014.Student
ORDER BY students2014.LastName