我使用 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
)
Run Code Online (Sandbox Code Playgroud)
孩子:
CREATE TABLE public.child
(
child bigint NOT NULL,
money double precision NOT NULL,
CONSTRAINT child_pkey PRIMARY KEY (child)
)
Run Code Online (Sandbox Code Playgroud)
所以,我想在父表中插入数据,同时在子表中插入数据。如何在一个查询中完成它?是否可以?
使用 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;
Run Code Online (Sandbox Code Playgroud)
带有 CTE 的查询会在“主”查询之前独立执行 CTE 查询。CTE 的结果可以进一步使用。CTEINSERT
语句返回带有子句的插入子 ID RETURNING
。以下查询将使用它。