Opa*_*pal 4 postgresql parent-child self-reference sql-returning
我有下表:
DROP SEQUENCE IF EXISTS CATEGORY_SEQ CASCADE;
CREATE SEQUENCE CATEGORY_SEQ START 1;
DROP TABLE IF EXISTS CATEGORY CASCADE;
CREATE TABLE CATEGORY (
ID BIGINT NOT NULL DEFAULT nextval('CATEGORY_SEQ'),
NAME CHARACTER VARYING(255) NOT NULL,
PARENT_ID BIGINT
);
ALTER TABLE CATEGORY
ADD CONSTRAINT CATEGORY_PK PRIMARY KEY (ID);
ALTER TABLE CATEGORY
ADD CONSTRAINT CATEGORY_SELF_FK FOREIGN KEY (PARENT_ID) REFERENCES CATEGORY (ID);
Run Code Online (Sandbox Code Playgroud)
现在我需要插入数据。所以我从父母开始:
INSERT INTO CATEGORY (NAME) VALUES ('PARENT_1');
Run Code Online (Sandbox Code Playgroud)
现在我需要刚刚插入的父级的 ID 来向其中添加子级:
INSERT INTO CATEGORY (NAME, PARENT_ID) VALUES ('CHILDREN_1_1', <what_goes_here>);
INSERT INTO CATEGORY (NAME, PARENT_ID) VALUES ('CHILDREN_1_2', <what_goes_here>);
Run Code Online (Sandbox Code Playgroud)
如何获取并存储父级的 ID,以便稍后在后续插入中使用它?
小智 5
您可以将数据修改 CTE 与以下returning子句一起使用:
with parent_cat (parent_id) as (
INSERT INTO CATEGORY (NAME) VALUES ('PARENT_1')
returning id
)
INSERT INTO CATEGORY (NAME, PARENT_ID)
VALUES
('CHILDREN_1_1', (select parent_id from parent_cat) ),
('CHILDREN_1_2', (select parent_id from parent_cat) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |