我在postgres数据库中有3个表。使用以下代码创建:
CREATE TABLE AUTHOR(
ID SERIAL PRIMARY KEY,
NAME TEXT
);
CREATE TABLE BOOK(
ID SERIAL PRIMARY KEY,
NAME TEXT
);
CREATE TABLE BOOK_AUTHOR(
BOOK_ID INTEGER REFERENCES BOOK(ID),
AUTHOR_ID INTEGER REFERENCES AUTHOR(ID)
);
一本书可以有多个作者。
我想在作者表中插入多个作者。
书表中的书。
并配对BOOK_AUTHOR桌子。
例如:如果 BOOK X 是由 A 先生和 B 先生撰写的
我希望表格内容是这样的
AUTHOR
ID-NAME
1, Mr. A
2, Mr. B
BOOK
ID-NAME
1, X
BOOK_AUTHOR
BOOK_ID-AUTHOR_ID
1,1
1,2
我正在使用postgres-php。
我知道我可以在作者表中插入数据。在书表中插入数据。对它们进行查询以获取 ID。
然后插入book_author表中。
但是有没有办法更有效地插入这些数据呢?
最好的方法是什么?
PostgreSQL有一个非常方便的"RETURNING"函数,你可以在这里像这样使用:
WITH authors AS (
INSERT INTO
author (name)
VALUES
('Mr. A'), ('Mr. B')
RETURNING
id
), books AS (
INSERT INTO
book (name)
VALUES
('X')
RETURNING
id
)
INSERT INTO
book_author
SELECT
b.id
, a.id
FROM
books b
, authors a;
只需制作输出的笛卡尔乘积,并将其用作第三个插入的输入。