Sql 将一个Insert查询的结果插入到另一个Insert查询中
我有两张桌子。表1将userid作为主键。表2使用userid作为外键,我需要将数据插入表1和表2中。我想在一份声明中完成这一切 如果表2的插入失败,我需要删除表1的插入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
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:基本上是的,要么全是,要么全是。非常感谢!