在第三个表中插入数据,并在另外两个表中插入值


Insert data in 3rd table with the values inserted in 2 other table

我在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;

只需制作输出的笛卡尔乘积,并将其用作第三个插入的输入。