gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:54:34 25 4
gpt4 key购买 nike

如何在 MySql 中获得此代码/输出:

在 MSSQL 中有一个递归的 cte 来用随机数据填充一个表而没有循环,例如开始/结束。在 MySql 中搜索类似的逻辑,但大多数或所有解决方案都使用开始/结束或 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 秒

2- 以上使用 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

最佳答案

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

关于MySql,没有循环用半/随机数据填充表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com