MySql,无循环用半/随机数据填充表

时间:2014-11-18 05:57:23

标签: mysql sql-server

如何在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

1 个答案:

答案 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