Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将一个Insert查询的结果插入到另一个Insert查询中_Sql_String_Postgresql_Sql Insert_Common Table Expression - Fatal编程技术网

Sql 将一个Insert查询的结果插入到另一个Insert查询中

Sql 将一个Insert查询的结果插入到另一个Insert查询中,sql,string,postgresql,sql-insert,common-table-expression,Sql,String,Postgresql,Sql Insert,Common Table Expression,我有两张桌子。表1将userid作为主键。表2使用userid作为外键,我需要将数据插入表1和表2中。我想在一份声明中完成这一切 如果表2的插入失败,我需要删除表1的插入 INSERT into table1 (userid,email)Values(12,"example@gmail.com") RETURNING userid INSERT into table2(userid,name,address)Values(12,"Joe","1

我有两张桌子。表1将userid作为主键。表2使用userid作为外键,我需要将数据插入表1和表2中。我想在一份声明中完成这一切 如果表2的插入失败,我需要删除表1的插入

INSERT into table1 (userid,email)Values(12,"example@gmail.com") RETURNING userid

INSERT into table2(userid,name,address)Values(12,"Joe","123 test Dr") 

如何在一个语句中完成此操作?

您只需将第一个
插入
包装到
with
子句中即可。如果您事先知道所有值,您甚至不需要返回

with ins as (
    insert into table1 (userid, email)
    values(12,'example@gmail.com') 
)
insert into table2 (userid, name, address)
values(12, 'Joe', '123 test Dr')
另一方面,如果
userid
是自动生成的值,则可以从CTE返回该值,并在其他插入中使用它,如下所示:

with ins as (
    insert into table1 (email)
    values('example@gmail.com') 
    returning userid
)
insert into table2 (userid, name, address)
select userid, 'joe', '123 test Dr'
from ins

旁注:对文字字符串使用单引号。双引号用于标识符(列名、表名等)。

如果第二次插入失败,第一次插入不会发生吗?@JuliaT:基本上是的,要么全是,要么全是。非常感谢!