使用重复值一次在多个表中插入数据

时间:2013-12-19 10:04:16

标签: sql postgresql postgresql-9.1 common-table-expression postgresql-9.2

我必须直接在第一个和第二个表中插入数据。但我收到数据作为数组并插入第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,但细节和其他列不同

@我的问题是我会获得单击,但我需要迭代第3桌。

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中可用还是可行?

1 个答案:

答案 0 :(得分:0)

是的,绝对可能。
您可以将CTE中的行与VALUES表达式相关联,以便将它们合并为data-modifying CTE中的新INSERT。像这样:

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, ...);