gpt4 book ai didi

Postgresql多对多关系插入

转载 作者:行者123 更新时间:2023-11-29 12:27:23 25 4
gpt4 key购买 nike

我正在使用 Postresql 9.3.5。我在实体“Foo”和“Bar”之间建立了多对多关系,我将其建模为:

CREATE TABLE Foo
(
id SERIAL PRIMARY KEY NOT NULL,
.... various columns for foo ....
);

CREATE TABLE Bar
(
id SERIAL PRIMARY KEY NOT NULL,
field1 varchar(50) UNIQUE NOT NULL,
.... various columns for bar ....
);

CREATE TABLE FooBar
(
fooID int NOT NULL,
barID int NOT NULL,
PRIMARY KEY (fooID, barID),
FOREIGN KEY (fooID) REFERENCES Foo(id),
FOREIGN KEY (barID) REFERENCES Bar(id)
);

现在我要做的是向 Foo 中插入一条记录,向 Bar 中插入一条相应的记录,然后插入包含 foo 和 bar 条目 ID 的匹配 FooBar 记录。

注意:我不知道何时插入 Bar 记录是否已经存在,所以目前我的 Bar 插入看起来像这样:

INSERT INTO Bar(field1, .... other fields for Bar....) 
SELECT 'value1', .... other values for the insert....
WHERE NOT EXISTS (
SELECT 1 FROM Bar WHERE field1 = 'value1')

哪个工作正常,但我的问题是:如何获取新插入(或现有)的 Bar 记录的 ID,以便我可以将其插入到 FooBar 表中?

最佳答案

这似乎可行,尽管它远谈不上优雅,而且可能效率很低:

WITH new AS (
INSERT INTO bar(field1)
SELECT ('aaa') WHERE NOT EXISTS (
SELECT 1 FROM bar WHERE field1='aaa'
) RETURNING id
),
existing AS (
SELECT id FROM bar WHERE field1='aaa'
)
SELECT id FROM existing UNION SELECT id FROM new

我想这会很低效,因为在 bar 中重复搜索匹配值。更有效的解决方案可能是编写存储过程。

关于Postgresql多对多关系插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25174585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com