gpt4 book ai didi

sqlite - 根据递归查询的结果创建表(with 语句)

转载 作者:行者123 更新时间:2023-12-03 17:56:07 30 4
gpt4 key购买 nike

我想根据 SQLite 中递归查询的结果创建一个新的(持久的)表。例如,让我们创建一个包含列 (n, fct) 的表,其中 n 表示一个自然数,fct 表示它的阶乘:

-- factorial of n = 0, 1, ..., 5
WITH RECURSIVE fact_i (n, fct) AS (
VALUES (0, 1)
UNION ALL
SELECT n+1, fct * (n+1) FROM fact_i
WHERE n < 5)
SELECT * FROM fact_i;

结果

0|1
1|1
2|2
3|6
4|24
5|120

但是,我想将结果存储在一个持久表中,比如 factorials

我试过了

CREATE TABLE factorials (n, fct) AS
WITH RECURSIVE fact_i (n, fct) AS (
VALUES (0, 1)
UNION ALL
SELECT n+1, fct * (n+1) FROM fact_i
WHERE n < 5)
SELECT * FROM fact_i;

WITH RECURSIVE fact_i (n, fct) AS (
VALUES (0, 1)
UNION ALL
SELECT n+1, fct * (n+1) FROM fact_i
WHERE n < 5)
CREATE TABLE factorials (n, fct) AS
SELECT * FROM fact_i;

但两者都会导致语法错误。有没有办法在 SQLite 中创建这样的表?

最佳答案

是的,这是可能的(用额外的 SELECT * FROM () 包装):

CREATE TABLE factorials AS
SELECT *
FROM (
WITH RECURSIVE fact_i (n, fct) AS (
VALUES (0, 1)
UNION ALL
SELECT n+1, fct * (n+1) FROM fact_i
WHERE n < 5)
SELECT * FROM fact_i) s;

db<>fiddle demo

编辑:

实际上,您需要做的就是从 CREATE TABLE 中删除列列表:

CREATE TABLE factorials AS
WITH RECURSIVE fact_i (n, fct) AS (
VALUES (0, 1)
UNION ALL
SELECT n+1, fct * (n+1) FROM fact_i
WHERE n < 5)
SELECT * FROM fact_i;

db<>fiddle demo2

关于sqlite - 根据递归查询的结果创建表(with 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58791562/

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