gpt4 book ai didi

postgresql - 具有来自可选子查询的多个返回值的 INSERT

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

我想使用另一个表中的参数和一些可选值执行 INSERT。 (可选的我的意思是如果子查询失败我只想插入参数值而不是什么都不插入。)

我的第一次尝试是:

INSERT INTO my_table (foo, bar, something)
VALUES (:param, (SELECT bar, something FROM other_table WHERE (foo = :param));

但是没有用。错误信息是“subselect must have only one field”。

另一种方法,灵感来自 this question是:

INSERT INTO my_table (foo, bar, something)
SELECT :param, o.bar, o.something FROM other_table o WHERE o.foo = :param;

但是如果它为 WHERE 子句找到内容,这只会执行 INSERT。所以它的行为不同于真正的子查询。所以我想到了这个:

INSERT INTO my_table (foo, bar, something)
VALUES (:param,
       (SELECT bar FROM other_table WHERE (foo = :param),
  (SELECT something FROM other_table WHERE (foo = :param));

这可行,但由于有两个子选择,当然看起来不必要的慢。

所以我的问题是:我能否以某种方式让它只与一个子选择一起工作。

最佳答案

您可以使用常规 select 左连接 values 子查询:

insert into my_table (foo, bar, something)
select new_foo, bar, something
from (
values (:param)
) param (new_foo)
left join (
select foo, bar, something
from other_table
) other on new_foo = foo

关于postgresql - 具有来自可选子查询的多个返回值的 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921623/

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