postgresql - 如何向父表和子表插入数据
问题描述
我使用 postgeSQL,我有这样一个问题。
我有两张桌子,女巫看起来像这样:
家长:
CREATE TABLE public.parent
(
parent_id bigint NOT NULL,
name character varying(30) NOT NULL,
email character varying(30) NOT NULL,
child_id bigint NOT NULL,
CONSTRAINT parent_pkey PRIMARY KEY (parent_id),
CONSTRAINT unique_child UNIQUE (child_id)
,
CONSTRAINT child_fkey FOREIGN KEY (child_id)
REFERENCES public.child (child) MATCH SIMPLE
ON UPDATE RESTRICT
ON DELETE CASCADE
)
孩子:
CREATE TABLE public.child
(
child bigint NOT NULL,
money double precision NOT NULL,
CONSTRAINT child_pkey PRIMARY KEY (child)
)
所以,我想在父表和子表中同时插入数据。如何在一个查询中完成?可能吗?
解决方案
使用 CTE (WITH
子句) 允许进行双重插入:
WITH insert_child AS (
INSERT INTO child VALUES
(42, 5.23)
RETURNING child
)
INSERT INTO parent
SELECT
/* parent data */
child
FROM insert_child;
带有 CTE 的查询在“主”查询之前独立执行 CTE 查询。CTE 的结果可以进一步使用。CTE语句使用子句INSERT
返回插入的子 ID 。RETURNING
以下查询使用它。
推荐阅读
- velocity - 在 Apache Velocity 中没有数学工具的情况下获得浮点数
- ios - 无法使用 Swift 中返回的数组中的数据更改 for 循环中的文本字体
- square-connect - 在 api 中创建的方形订单未显示在实时仪表板中
- javascript - 如何同时运行 Django 和 React 服务器?
- javascript - 将 HTML 5 Canvas 序列化为 SVG 以发送到服务器
- kotlin - Tornadofx 过滤器输入
- firebase - 通过电子邮件/密码进行身份验证的颤振问题
- c# - 将 ExpandoObject 反序列化为 Object
- vb.net - vb.net - 服务应用程序和表单应用程序都具有非常高的 CPU 使用率,因为添加了套接字通信
- apache-camel - SFTP 传输:如何按名称过滤文件