0

我必须直接在第一个和第二个表中插入数据。但是,作为数组接受了数据的第3张表被作为相同插入了第3表。用重复值一次插入多个表中的数据

在我的第三个表中值将被重复。例如:

值:

{name=ff,age=45,empid=23,desig=se,offid=1,details=kk,offid=2,details=aa,offid=3,details=bb,offid=4,details=cc} 

因此,使用第二台userid作为同样为所有offid,但具体细节等栏目不同

@My问题是我会得到一个打击,但我需要迭代第三个表。

with first_insert as (
    insert into sample(name,age) 
    values(?,?) 
    RETURNING id 
    ), 
second_insert as (
    insert into sample1(empid,desig) 
    values((select id from first_insert),?) 
    RETURNING userid 
    ) 
insert into sample2(offid,details) 
values((select userid from second_insert),?) 

这是PostgreSQL中可用或可能的吗?

回答

0

是的,绝对有可能。
您可以连接从CTE到VALUES表达式的行,将它们合并为一个新的INSERT,data-modifying CTE。类似这样的:

WITH first_insert AS (
    INSERT INTO sample(name,age) 
    VALUES (?,?) 
    RETURNING id 
    ) 
, second_insert AS (
    INSERT INTO sample1(empid, desig, colx) 
    SELECT i1.id, v.desig, v.colx 
    FROM first_insert i1 
     , (VALUES(?,?)) AS v(desig, colx) 
    RETURNING userid 
    ) 
INSERT INTO sample2(offid, details, col2, ...) 
SELECT i2.userid, v.details, ... 
FROM second_insert i2 
    , (VALUES (?,?, ...)) AS v(details, col2, ...);