从LEFT JOIN查询中删除重复项

时间:2013-10-24 14:16:48

标签: mysql sql select join

我正在使用以下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确定)。

这可能吗?

2 个答案:

答案 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