回 帖 发 新 帖 刷新版面

主题:mysql数据库排序

一个表中,多个数据(开头是无序排列的),现在要把它排序好成名次1,2,3,4这样.
例如:一张表学生成绩表student

  Name   Course  
  张三    95    
  李四    62   
  王五    85   
  赵六    32   

要求:把表T中的Course排序,生成名次字段(abc),并更新student表
查询结果如下:
  Name   Course  abc
  张三    95      1
  王五    85      2
  李四    62      3
  赵六    32      4

以下是我用的方法:
SELECT a.*,(SELECT COUNT(*) FROM student b WHERE b.Course>a.Course)+1 AS abc FROM student a ORDER BY abc

可以得出想要的答案,但这个得出的答案只是一个临时表,abc字段是临时的,只要把表关了再开过.abc就会消失.我怎样才能把abc字段更新到student表里面.

如果大家有好方法,不妨说出来,帮帮小女子.麻烦了

回复列表 (共4个回复)

沙发

alter table student add abc int   --先增加一个字段

update student set abc=(select count(*)+1 from student a where course>student.course)   --存入名次

select * from student order by abc --查询出结果

板凳

二楼的大哥,不行啊第二行update student set abc=(select count(*)+1 from student a where course>student.course)   --存入名次

老是提示错误:
"you can't specify target table 'student' for update in from clause"

到底是什么原因,我很菜啊.不太明白那里出错了.

3 楼

下面是t-sql,不知mysql是否一样

update student set abc=(SELECT COUNT(*)+1 FROM student WHERE Course>a.Course) FROM student a

4 楼

不行啊,从错误提示来看,好像说是版本不对。

我来回复

您尚未登录,请登录后再回复。点此登录或注册