db2中的语句
select * from ( select rownumber() over (order by a.stdcno) as num , a.id ,b.cuno from t1 a ,t2 b where a.id = b.id ) as Amysql5.7中的语句
select cast(@row_num := @row_num + 1 as char) AS num , A.* from (select @row_num :=0) r,( select a.id, b.cuno from t1 a, t2 b where a.id =b.id order by a.stdcno ) as A )关键点
1 采用cast(@row_num := @row_num + 1 as char) 来替换rownumber(),并将其放到最外层,目的是为了先排序,在赋值num序号,保证序号有序性
2 需要将over(order by a.stdcno) 放到mysql的最后,where条件的后面
3 借助(select @row_num :=0) r 实现num序号从0开始递增
4 最后的结果可能还是不会跟db2中的一样,比如,当order by 后面的stdcno值是一样时,mysql和db2的底层算法不一样,排序的先后顺序可能就不一样,这个是没办法做到完全一致的(参考的方案,在order by 后面引入id 多个字段排序,保证顺序)