【发布时间】:2018-09-29 23:44:45
【问题描述】:
我想用另一个表中的参数和一些可选值进行 INSERT。 (可选的意思是如果子查询失败,我只想插入参数值而不是什么都不插入。)
我的第一次尝试是:
INSERT INTO my_table (foo, bar, something)
VALUES (:param, (SELECT bar, something FROM other_table WHERE (foo = :param));
但是没有用。错误消息是“子选择必须只有一个字段”。
受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));
这可行,但由于两个子选择,这当然看起来不必要的慢。
所以我的问题是:我能否以某种方式让它只使用一个子选择。
【问题讨论】:
标签: postgresql subquery sql-insert sql-subselect