我想插入一批递归数据,每行在同一个表中对其父行的id有parent_id
个引用。插入所有行的快捷方式是什么?
CREATE TABLE subjects (
id SERIAL PRIMARY KEY,
name CHARACTER VARYING(128) NOT NULL
);
CREATE TABLE items (
id SERIAL PRIMARY KEY,
subject_id INTEGER NOT NULL REFERENCES subjects (id),
content TEXT,
parent_id INTEGER REFERENCES items (id)
);
我可以等待每个返回的id,然后将其设置为parant_id
,但这会导致每个insert等待其父项完成。
以下插入内容似乎仅适用于1个父级和1个小孩,如果我还要插入主题有item 2
而item 2
有child 2
,该怎么办?我不必使用此查询,我只是想知道更好的方法来执行此操作。
WITH s AS
( INSERT INTO subjects (NAME)
VALUES ('some subject') RETURNING *),
i AS
( INSERT INTO items (subject_id, content)
VALUES (
(SELECT id
FROM s), 'item parent 1') RETURNING *)
INSERT INTO items (subject_id, content, parent_id)
VALUES (
(SELECT id
FROM s), 'item parent 1 child 1',
(SELECT id
FROM i))