繁体   English   中英

从LEFT JOIN查询中删除重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM