MySQL 8递归CTE生成的行数

我想使用MySQL CTE生成n个随机行数。到目前为止,我有:

WITH RECURSIVE cte AS
(
    SELECT LEFT(MD5(RAND()),8) AS `three`
    UNION ALL
    SELECT LEFT(MD5(RAND()),8) AS `three`
    WHERE `rn` < 10
)
SELECT * FROM cte
;

如何创建条件

WHERE `rn` < 10

工作正常,假设rn是递归查询返回的行号?

我知道您可以使用:

SELECT ROW_NUMber() OVER () AS `rn`

获取行号,但如何使用?有其他解决方案吗?

我正在使用MySQL 8。

zhanjial 回答:MySQL 8递归CTE生成的行数

您可以在CTE中添加一个“控件”列,该列从1开始递增。然后,您可以限制递归步骤在该列中的值超过10(或 n 等于)时结束。在外部SELECT中,只需选择具有随机值的列即可,而不要选择“控制”列。

WITH RECURSIVE cte
AS
(
SELECT left(md5(rand()),8) three,1 i
UNION ALL
SELECT left(md5(rand()),i + 1 i
       FROM cte
       WHERE i + 1 <= 10
)
SELECT three
       FROM cte;

db<>fiddle

本文链接:https://www.f2er.com/3095459.html

大家都在问