原sql
SELECT
serialno,
(@rownum := @rownum + 1) AS rn
FROM
(
SELECT
serialno,
@rownum := 0,
batchno,
state
FROM
lbpoinsuredlist
) k
WHERE
k.batchno = '1100000006045-01' and
k.state = '1'
执行结果如图,顺序是乱的
微信截图_20200302144607.png
解决办法
select
serialno,
(@rownum := @rownum + 1) AS rn
from
(
SELECT
serialno,
@rownum := 0,
batchno,
state
FROM
lbpoinsuredlist
WHERE state = '1' and batchno = '1100000006045-01'
) k
执行结果如图
微信截图_20200302144821.png
参考
原文:http://blog.sina.com.cn/s/blog_a08c9dff0102w798.html
MySQL的SELECT语句默认排序是怎样排序的。MySQL SELECT 默认排序是按照物理存储顺序显示。(不进行额外排序)也就是说SELECT * FROM 会产生“表扫描”。如果表没有增,删,改操作,记录会显示为插入的顺序。这就是初始为什么像是递增的原因。
那么,当我们进行增,删,改以后不难发现会乱序,这便是问题所在。增删改是惯用功能,因此必须注意这个细节。当我们不进行ORDER BY来规定排序时,MySQL将会以最快的形式(物理存储顺序)展示数据,导致乱序。