在第3个表中插入数据,并在2个其他表中插入值

时间:2016-02-14 12:01:36

标签: php database postgresql insert sql-insert

我在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表。

但有没有办法更有效地插入这些数据?

可能的最佳方式是什么?

1 个答案:

答案 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;

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