微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL多INSERT …返回多列

我正在使用Postgres 9.3构建一个数据库作为后端,有3个表:
table1 (user_id,username,name,surname,emp_date)
table2 (pass_id,user_id,password)
table3 (user_dt_id,adress,city,phone)

可以看出table2和table3是table1的子表.
我可以在table1(parent)中提取新插入行的user_id:

INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid;

我需要将新提取的id(来自table1)插入table2和table3的user_id列以及这些表的唯一数据.基本上3 X INSERT ……
我怎么做?

使用 data-modifying CTEs链接三个INSERT.像这样的东西:
WITH ins1 AS (
   INSERT INTO table1 (username,surname)
   VALUES ('johnee','smith')
   RETURNING user_id
   ),ins2 AS (
   INSERT INTO table2 (user_id,password)
   SELECT ins1.user_id,'secret'
   FROM   ins1                            -- nothing to return here
   )
INSERT INTO table3 (user_id,phone)
SELECT ins1.user_id,...
FROM   ins1
RETURNING user_id;

>建议始终为INSERT添加列定义列表(ad-hoc代码除外).否则,如果表结构发生变化,您的代码可能会以惊人的方式中断.
>我省略了列定义列表中您只需输入DEFAULT的列.认值自动应用.更短,相同的结果.
>如果你想要返回结果user_id,那么最后的RETURNING是可选的(显然是从一个序列或其他认值.它实际上从table3返回user_id,但除非你有一些触发器或其他魔法干扰,否则它是相同的.

有关数据修改(a.k.a.“可写”)CTE的更多详细信息:

> Are SELECT type queries the only type that can be nested?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐