如何在MySql中使用此代码/输出:
在MSSQL中有一个递归的cte来填充一个没有循环的随机数据表,例如begin / end。在MySql中搜索了类似的逻辑,但大多数或所有解决方案都使用begin / end或for循环。不知道你是否可以在MySql中建议没有循环的解决方案。
谢谢
--MSSQL cte:------------------------------------
with t1( idi,val ) as
(
select
idi=1
,val=cast( 1 as real)
union all
select
idi=idi+1
,val=cast(val+rand() as real)
from t1
where idi<5
)
select idi,val from t1
-----------------------------------------------
MSSQL中的输出:(半随机值)
idi | val
-------------
1 | 1
2 | 1.11
3 | 1.23
4 | 1.35
5 | 1.46
编辑:
关于将基于集合的代码视为基于循环的代码的讨论确实,我可以理解这一点但只是出于兴趣在MSSQL 2008r2中试了一下,结果如下:
1-以上代码,32000递归花费2.812秒
上面用WHILE BEGIN END循环创建的输出为32000,输出为53.640秒
显然这与执行时间有很大不同。
这是基于循环的代码:
insert into @t1(idi,val)
select
idi=1
,val=1
declare @ii int = 2
while @ii<32000
begin
insert into @t1(idi,val)
select
idi=idi+1
,val=val+rand()
from @t1
where idi=@ii-1
set @ii=@ii+1
end
select * from @t1
答案 0 :(得分:0)
MySql不支持CTE。
您需要一个程序或一些棘手的查询,如下所示:
set @id=0;
set @val=0;
SELECT @id:=@id+1 As id,
@val:=@val+rand() As val
FROM information_schema.tables x
CROSS JOIN information_schema.tables y
LIMIT 10