【发布时间】:2018-07-08 17:53:45
【问题描述】:
我在 Windows 7 上使用 Maria DB 版本 10.2.9,
MariaDB > select @@version;
+----------------+
| @@version |
+----------------+
| 10.2.9-MariaDB |
+----------------+
我正在尝试使用带有 INSERT SELECT 的递归 CTE 来创建一些测试数据。为简单起见,下面是要填充的单列表:
CREATE TABLE cte_populated
(
id INT NOT NULL PRIMARY KEY
)
ENGINE = InnoDB;
以及生成值 1 到 10 的 CTE:
WITH RECURSIVE int_seq AS (
SELECT 1 AS val
UNION ALL
SELECT val + 1
FROM int_seq
WHERE val < 10
)
INSERT cte_populated(id)
SELECT int_seq.val FROM int_seq;
以上会产生语法错误。 请注意,如果删除插入行,则 10 行将按预期显示,SELECT 语句中的值为 1 到 10。
有人知道在 INSERT/SELECT 查询中使用 CTE 的限制或任何解决方法吗?
更新: 以下两个查询有效,一个来自@elenst 回复,另一个来自提供@PM 77 评论中的链接:
INSERT cte_populated(id)
WITH RECURSIVE int_seq AS (
SELECT 1 AS val
UNION ALL
SELECT val + 1
FROM int_seq
WHERE val < 10)
SELECT int_seq.val as id FROM int_seq;
以下内容改编自@PM 77 提供的link。
INSERT INTO cte_populated
WITH RECURSIVE int_seq(val) AS (
SELECT 1
UNION ALL
SELECT 1 + val FROM int_seq WHERE val < 10)
SELECT * FROM int_seq;
【问题讨论】:
-
mysqlserverteam.com/… 寻找
INSERT。 -
请注意,MariaDB 具有动态生成“序列”的伪表。
标签: mariadb common-table-expression