mysql 用 @rownum := @rownum+1 实现 "oracle中的rownum = xxx或者rownum <= xxx" 功能

我们先看看MySQL官网文档是怎么描述这个问题的:如下图所示。

由上面可知:MySQL不允许SQL语句的嵌套语句内的when rownum=1等类似的分页查询,需要用到临时变量来实现改造该功能

举个例子:

Oracle中的SQL写法如下:

select  * from
oms_sub_tempdata 
where rownum <= 10 order by dataid asc

MySQL改造之后的写法如下:

select a.* from 

(select b.*,@rownum := @rownum+1 AS rownum from oms_sub_tempdata b,(SELECT @rownum:=0) r) a 

where rownum <=  #{rownum} order by dataid asc

原文地址:https://www.cnblogs.com/4AMLJW/p/OraclerownuToMysql202004011738.html

时间: 2024-10-07 13:08:33

mysql 用 @rownum := @rownum+1 实现 "oracle中的rownum = xxx或者rownum <= xxx" 功能的相关文章

浅谈oracle中rowid和rownum

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

Oracle中rownum和 order by联合使用导致排序错乱

在使用Oracle进行分页查询的时候,一般情况下我们都会携带很多参数.但是今天发现一个很奇怪的东西,当排序字段不是主键,且多条数据中该排序字段的值均相同的情况下,会出现分页查询的排序顺序和不分页查询的排序顺序不一样的情况.下面直接用SQL来说明一下: 1.原始的查询SQL select ty.countryname,ty.s_adddate from t_d_Country ty order by ty.s_adddate desc; 2.执行分页的查询SQL select * from (se

oracle中设置自增主键

首先,你要有一张表!CREATE TABLE example(ID Number(4) NOT NULL PRIMARY KEY,NAME VARCHAR(25),PHONE VARCHAR(10),ADDRESS VARCHAR(50));如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!然后,你需要一个自定义的sequenceCREATE SEQUENCE emp_sequenceINCREMENT BY 1 -- 每次加几个START WITH

关于Oracle中rownum与&lt;=问题

今天在帮一个朋友改写SQL语句,要将原来的Oracle语句改写成MySQL语句,遇到以下的一个语句: select * from(select dp.* from d_item di join  d_product dp on(di.product_id=dp.PRODUCT_ID) order by di.product_num desc) where rownum <= ? 在这个语句中,出现rownum<=?,但是不知道为什么要这样使用.在官方文档中,rownum后只能跟一个常量.平时我

《转》ORACLE中的rownum(实现真分页的方法)

1 引言 Oracle中的rownum一般是在实现分页查询时用到,虽然在我做的项目中只实现了分页显示而没有实现真正的分页,但是出于学习的目的研究了一下oracle的rownum.在使用查询语句时,我们经常要求返回表中的前n条记录或者是中间的几条记录,比如在一个大表(假设有10W条数据)要求查询从第1000到1005条的记录.面对这种查询,我们怎么办呢?mysql和oracle都有自己的解决办法. 2 MySql中的实现 在mysql中,我们可以使用limit语句来实现: 1)查询从第1000到1

转:Oracle中的rownum不能使用大于&gt;的问题

一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.<=.!=”, 并非说用“>.>=.=.between..and”时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来. 其实,只要理解好了这个 rownum 伪列的意义就不应该感到惊奇. rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的: r

Oracle中rownum和row_number()的区别

Oracle中 rownum,为符合where条件的输出结果集中现在有多少条记录. where条件中的rownum可以这样理解 select中的rownum可以理解为,将这条记录放到输出结果集中,就在这条记录中加上这个是第几行(输出一行生成一个) row_number() OVER (ORDER BY id),为结果记录集生成后,按给定字段排序后的行号 注意这两者都是在order by条件之前执行的.

【转】Oracle 中 rownum与rowid

对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇. rowid与rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,

【转】oracle中rownum和row_number()

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后