今天在做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使用】

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐