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