我需要在一个表中插入一行,并使用该行的ID在一个事务中将另外两行插入不同的表中。我已经尝试过了
begin;
insert into table default values returning table.id as C;
insert into table1(table1_id, column1) values (C, 1);
insert into table1(table1_id, column1) values (C, 2);
commit;
但是它不起作用。我该如何解决?
已更新
答案 0 :(得分:1)
您需要CTE,并且不需要一次交易/提交就可以完成一次交易:
WITH inserted AS (
INSERT INTO ... RETURNING id
)
INSERT INTO other_table (id)
SELECT id
FROM inserted;
编辑: 要使用该ID将两行插入到单个表中,可以采用以下两种方法:
使用这些表格作为设置:
CREATE TEMP TABLE t1 (id INTEGER);
CREATE TEMP TABLE t2 (id INTEGER, t TEXT);
方法1:
WITH inserted1 AS (
INSERT INTO t1
SELECT 9
RETURNING id
), inserted2 AS (
INSERT INTO t2
SELECT id, 'some val'
FROM inserted1
RETURNING id
)
INSERT INTO t2
SELECT id, 'other val'
FROM inserted1
方法2:
WITH inserted AS (
INSERT INTO t1
SELECT 4
RETURNING id
)
INSERT INTO t2
SELECT id, v
FROM inserted
CROSS JOIN (
VALUES
('val1'),
('val2')
) vals(v)
如果您运行其中任何一个,然后检查t2,您将看到它包含预期值。
答案 1 :(得分:0)
请找到以下查询:
插入table1(columnName)values('stack2');
插入table_2值(SCOPE_IDENTITY(),'val1','val2');