gpt4 book ai didi

postgresql - 使用 SELECT 从可能为空的表中插入

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

我有一个 postgres 数据库模式,其中新插入的行引用其他行。表的骨架是:

CREATE TABLE table_1 (
f1 UUID PRIMARY KEY,
f2 UUID NOT NULL,
f3 text NOT NULL,
f4 text NOT NULL DEFAULT '',
f5 text NOT NULL DEFAULT '',
f6 UUID NULL,
);

这是我正在使用的 INSERT 查询:

INSERT INTO table_a (f1, f2, f3, f4, f5, f6)
SELECT $1, $2, $3, f4, f5, f2
FROM table_a
WHERE <conditionals>
ORDER BY <ordering>
LIMIT 1

基本思路是寻找满足条件的现有行。如果存在,则使用字段 f4、f5 和 f2 填充要插入的新行中的字段 f4、f5 和 f6。如果不存在,则这些字段应取其默认值(分别为“”、“”和 NULL)。

问题是,如果没有找到行,则 SELECT 本身似乎不返回任何结果,并且整个插入被简单地跳过。如果一行与条件匹配,它工作正常,但如果该 SELECT 没有返回任何行,则不会。如何获得所需的行为?

最佳答案

insert into table_a (f1, f2, f3, f4, f5, f6)
select f1, f2, f3, f4, f5, f6
from (
(
select $1, $2, $3, f4, f5, f2, 1
from table_a
where <conditionals>
order by <ordering>
limit 1
) s
union all
select $1, $2, $3, '', '', null, 2
) s (f1, f2, f3, f4, f5, f6, o)
order by o
limit 1

关于postgresql - 使用 SELECT 从可能为空的表中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161192/

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