我有一个名为“场景”的表...
id created modified scene_id
------------------------------------------
1 1999-11-31 2000-01-27 ABCD
2 2000-12-31 2001-01-27 EFGH
3 2001-12-31 2002-01-27 IJKL
4 2002-12-31 2003-01-27 MNOP
5 2003-12-31 2004-01-27 QRST
...我想做的是在表末尾复制一行(本例中为第 2 行)n 次(本例中为 4 次),同时也更改 scene_id 以赋予它们唯一的标识符。这是一个简短的解释,但原来是一个大约有 50 列的大表,我想将一些行分成单独的部分,以获得如下所示的内容:
id created modified scene_id
------------------------------------------
1 1999-11-31 2000-01-27 ABCD
2 2000-12-31 2001-01-27 EFGH
3 2001-12-31 2002-01-27 IJKL
4 2002-12-31 2003-01-27 MNOP
5 2003-12-31 2004-01-27 QRST
6 2000-12-31 2001-01-27 EFGH-A
7 2000-12-31 2001-01-27 EFGH-B
8 2000-12-31 2001-01-27 EFGH-C
9 2000-12-31 2001-01-27 EFGH-D
我首先将一些信息保存在一个名为“变量”的临时表中
CREATE TEMP TABLE variables (
scene_id TEXT,
num_files INT,
scene_index INT
);
INSERT INTO variables VALUES (
'EFGH',
4,
2
);
SELECT * FROM variables;
scene_id num_files scene_index
------------------------------------
EFGH 4 2
我还将第 2 行存储在名为“dupedScene”的表中
CREATE TEMP TABLE dupedScene AS SELECT * FROM scenes WHERE id = (
SELECT scene_index FROM variables
);
UPDATE dupedScene
SET id = NULL; -- reset id column to trigger auto increment
SELECT * from dupedScene
id created modified scene_id
-------------------------------------------
null 2000-12-31 2001-01-27 EFGH
然后我尝试了各种方法使用递归 CTE 和 JOIN 来“循环”INSERT INTO,但我正在努力让这些东西一起工作。我已经做到了这一点,但我不断收到一般错误:
WITH RECURSIVE
counter(x) AS (
SELECT 1
UNION ALL
SELECT x + 1
FROM counter
WHERE x < (SELECT num_files FROM variables)
)
INSERT INTO scenes
SELECT * FROM dupedScene
JOIN counter ON x
有SQL高手可以帮忙吗?
查询将是
INSERT INTO scenes
WITH RECURSIVE
counter(x) AS (
SELECT 1
UNION ALL
SELECT x + 1
FROM counter
WHERE x < (SELECT num_files FROM variables)
)
SELECT * FROM dupedScene
JOIN counter ON x
但是您尝试将 5 列插入到场景中,但这很容易修复