我正在尝试将分页添加到简单的选择查询中,例如
select rownum rownum_,t.* from (select id,name from table) t
where rownum <=4
Run Code Online (Sandbox Code Playgroud)
但是,当条件存在且条件不存在时,上述查询的行为会有所不同.但是在删除名称列时,行为是一致的.有谁能说出原因?
我知道rownum是在运行查询时确定的,我无法理解的是rownum <= n的where条件会改变顺序
你必须明白这rownum是一个伪列.
rownum查询中的列表示订单(第一个记录,第二个,第三个......)
然后返回记录顺序
select id,name from table
Run Code Online (Sandbox Code Playgroud)
不保证.在您的请求中,与第一条记录关联的rownum将始终为1,因为第一条记录每次都可能不同.
总之,总是ORDER BY在您想要特定订单时使用.
rownum当您使用限制时,该表可能有一个索引rownum <= 4.然后订单可能由索引定义.至少这是它在MySQL中的工作方式.如果您想要特定的订购,请始终使用ORDER BY.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |