采取以下表格
CREATE TABLE album(
id SERIAL PRIMARY KEY NOT NULL,
duration INTEGER NOT NULL
);
CREATE TABLE genre(
id SERIAL PRIMARY KEY NOT NULL,
name VARCHAR(32) NOT NULL
);
CREATE TABLE album_genre(
album_id REFERENCES album(id),
genre_id REFERENCES genre(id)
);
我要插入以下数据
const album = {
duration: 12345
genre1Id: 1,
genre2Id: 2,
genre3Id: 3
}
我如何构建一个插入专辑数据的SQL查询,然后使用类型ID和插入的专辑ID
插入album_genre
答案 0 :(得分:2)
在Postgres中,您可以使用CTE中的inserts
构建查询。以下适用于您描述的情况:
with data(duration, genre1Id, genre2Id, genre3Id) as (
values(12345, 1, 2, 3)
),
i as (
insert into albums(duration)
select duration
from data
returning *
)
insert into album_genre (album_id, genre_id)
select i.id, v.genre
from i join
data d
on i.duration = d.duration, lateral
(values (d.genre1Id), (d.genre2Id), (d.genre3Id)) v(genre);
对于多行,相同的构造有效,但假设duration
是唯一的。您需要一个唯一的标识符来匹配插入的行与原始数据。