UPDATE更新原理为行更新,即查询当前行内数据之间的数据更新,所以我们要做的便是将需要更新的数据字段和更新数据源字段放在同一行
创建示例数据
INSERT INTO student (id,stuName,sex,score,rankData) VALUES
(1,'张三','男','64',''),
(2,'李四','女','57',''),
(3,'王五','男','74',''),
(4,'赵六','女','84',''),
(5,'孙七','男','51',''),
(6,'钱八','女','89',''),
(7,'周九','女','58','');
查询
select * from student
结果:
联表查询
select * from student a
INNER JOIN (
select t.Id,@i := @i + 1 as rankNum
from
(select @i := 0 ) r,
(select
*
from
student
order by
Id desc
)as t) t1
on a.id = t1.id
结果:
通过查询数据更新student表中的rankData字段
update student a
INNER JOIN (
select t.Id,@i := @i + 1 as rankNum
from
(select @i := 0 ) r,
(select
*
from
student
order by
Id asc
)as t) t1
on a.id = t1.id
set rankData = rankNum
select * from student
结果: