一个表与自身进行连接,称为自连接
问题的提出:一个网友提出这样一个SQL题目,说自己想了很久没解决,我一看,这不是很简单吗可是自己在查询分析器调试了半天原来问题并不是那不简单有一个学生表,里面有 学号 功课编号学生成绩三个字段.用一个SQL查询语句得出每门功课成绩最好的前两名学号 功课编号 学生成绩 1 1 99 2 1 98 3 1 100 4 2 88 5 2 87 6 2 88 7 3 99 8 3 88 9 3 100解决方法SELECT DISTINCT 学生表1.*FROM 学生表 学生表1 INNER JOIN 学生表 学生表2 ON 学生表1.学号 IN (SELECT TOP 2 学生表.学号 FROM 学生表 WHERE 学生表.功课编号 = 学生表1.功课编号 ORDER BY 学生成绩 DESC)
查询结果
学号 功课编号 学生成绩 1 1 99 2 1 98 4 2 88 6 2 88 7 3 99 9 3 100同样的问题还有查找不同课程成绩相同的学生的学号、课程号、学生成绩。同时:以上sql语句还可以优化下: