[英]Remove duplicates from LEFT JOIN query
我使用以下JOIN语句:
SELECT *
FROM students2014
JOIN notes2014 ON (students2014.Student = notes2014.NoteStudent)
WHERE students2014.Consultant='$Consultant'
ORDER BY students2014.LastName
检索存储在(notes2014)中的每个学生的学生列表(students2014)和相应的注释。
每个学生在notes2014表中都有多个注释,每个注释都有一个与每个学生的唯一ID相对应的ID。 上述声明返回了学生列表,但复制了每个有多个笔记的学生。 我只想显示每个学生的最新笔记(由最高笔记ID确定)。
这可能吗?
您需要基于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的表是一个很大的代码味道。 由于种种原因(只有几个:你不需要每年都改变你的数据库结构,多年来查询更多,更容易等等)你会更好地学习学生表和年份。 。 也许你“继承”了这个,但我想我会提到它。
通过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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.