我在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)
);
一本书可以有多位作者。
我想在AUTHOR表中插入多个作者。
BOOK表中的一本书。
并在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表。
但有没有办法更有效地插入这些数据?
可能的最佳方式是什么?
答案 0 :(得分:1)
PostgreSQL非常方便'返回'你可以在这里使用的功能如下:
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;
只需输出输出的笛卡尔积,并将其用作第三个插入的输入。