大家帮看下
List grades = session.createQuery("select c.name,s.name,g.grade,cls.classesNo from Grade g " +
"join g.course c join g.student s join s.classes cls " +
"where g.grade in ( select max(gg.grade) from Grade gg where gg.course.name = c.name group by gg.course.name) " +
"order by c.name").list();
谁能解释一下,看不懂
原来你是用Hibernate来做的啊,怪不得我以为这SQL有问题呢。你就可以按照我上面说的来理解哇。
查询出 同一个课程名中最大年级的课程名,年级,班级号码。
我猜的 你最好把名字弄出来
[quote]
select c.name,s.name,g.grade,cls.classesNo from Grade g " +
"join g.course c join g.student s join s.classes cls
[/quote]
你确认你的这个SQL语句没错?
[quote]join g.course[/quote]
表能跟字段进行 JOIN?
[quote]
select c.name,s.name,g.grade,cls.classesNo from Grade g " +
"join g.course c join g.student s join s.classes cls " +
"where g.grade in ( select max(gg.grade) from Grade gg where gg.course.name = c.name group by gg.course.name) " +
"order by c.name"
[/quote]
你可以这么理解:
[code="java"]select c.name,s.name,g.grade,cls.classesNo from Grade g " +
"join g.course c join g.student s join s.classes cls [/code]
是指从 Grade Course Student Classes 四个表中查出 课程名称、学生名称、分数、所属班级名称
[code="java"]where g.grade in ( select max(gg.grade) from Grade gg where gg.course.name = c.name group by gg.course.name)[/code]
是指你上面选出来的结果集必须要满足:这个学生的成绩是这门课程的最高分
[code="java"]order by c.name[/code]
是指将查出的结果按课程名进行升序排列
order by c.name 就是之前的join g.course c
是为了给课程排序,好看一下每个课程的成绩啊。
select max(gg.grade) from Grade gg where gg.course.name = c.name group by gg.course.name
这里就算出每门课程的最高成绩,但此时还没有查到每个班级的学员情况,所以在前面有一些join来关联。
欢迎采纳 。
[quote]
order by c.name 就是之前的join g.course c
是为了给课程排序,好看一下每个课程的成绩啊。
select max(gg.grade) from Grade gg where gg.course.name = c.name group by gg.course.name
这里就算出每门课程的最高成绩,但此时还没有查到每个班级的学员情况,所以在前面有一些join来关联。
[/quote]
我刚才说的 这个是正解,希望对你有用