MySQL 8 递归 CTE 生成行数

MySQL 8 Recursive CTE generate number of rows

我想使用 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.

您可以在 CTE 中添加一个 "control" 列,从一开始计数。然后,您可以限制递归步骤在该列中的值超过 10(或任何 n 时结束)。在外部 SELECT 中,只有 select 具有随机值的列,而不是 "control" 列。

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

db<>fiddle