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