首页 > 解决方案 > 如何向父表和子表插入数据

问题描述

我使用 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)
)

所以,我想在父表和子表中同时插入数据。如何在一个查询中完成?可能吗?

标签: postgresql

解决方案


演示:db<>fiddle

使用 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以下查询使用它。

进一步阅读,文档


推荐阅读