【Mysql、oracle 查询1-100连续数字】

今天在做oracle转mysql的时候遇到了一个小问题,需要查出1-100的连续数字处理一些逻辑,特此记录一下。

oracle中的查询方法

在oracle中查询1-100的连续数字比较容易,可以借用dual表和level就可以快速简单实现。

select level from dual connect by level <= 100

那么问题来了,dual表是oracle的特性,mysql中没有dual表也没有level列,要如何实现呢?

mysql中的查询方法(利用业务表)

经过我一通百度,发现了一个需要利用业务表的方法:
1、先初始化rownum变量为0,且将这个一行一列的0作为一张临时表r(select @rownum:=0)
2、将r这个临时表与业务表相关联(业务表至少需要100行数据

SELECT (@rownum := @rownum+1) AS code
FROM (SELECT @rownum:=0)r , ip_tbc_dict limit 100

但是业务表的数据变化较大,使用这种方式有一定的风险,能否像oracle一样不关联业务表呢?

mysql中的查询方法(利用临时表)

对于8.0以上的mysql版本,支持with as 语法,可以通过建立临时表的方式实现查询连续数字。

with recursive c(n) AS
 (
 select 1 
 union ALL
 select n + 1
 from c
 where n < 100
 )
 select * from c;

WITH recursive使用方法可以参考
【MYSQL WITH recursive使用】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值