mysql将序号更新为到字段值priority出现了意想不到

假如有表 student 有id为 1-10的10条记录,此次更新表student 中字段 priority 应为1-10,升序

update  student as  r INNER  JOIN  
(
  select (@i:=@i+1 ) as row_num,  a.id, a.priority  from student as a , (select @i:=0) d  where a.priority >=0   ORDER BY a.priority asc 
) as  t1
 on r.id =t1.id 

set r.priority = t1.row_num

此时执行此条语句 当前表中记录为priority 字段 1,3-12升序

update  student as  r INNER  JOIN  
(
  select (@i:=@i+1 ) as row_num,  a.id, a.priority  from student as a , (select @i:=2) d  where a.priority >=2   ORDER BY a.priority asc 
) as  t1
 on r.id =t1.id 

set r.priority = t1.row_num

当我设置id为10 priority 为12 的记录的priority 字段的值为2 后再次执行

update  student as  r INNER  JOIN  
(
  select (@i:=@i+1 ) as row_num,  a.id, a.priority  from student as a , (select @i:=2) d  where a.priority >=2   ORDER BY a.priority asc 
) as  t1
 on r.id =t1.id 

set r.priority = t1.row_num

执行后
id为10的这条记录priority 应该变成3 但是结果却变成12

问题1:这是什么原因导致的?
问题2:这个怎么优化。

原因找到了,更新时关联的sql子查询orderby会失效,解决方法是将关联sql设为子查询,外面包裹设置orderby相同的参数即可,

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。