我想用另一个表中的参数和一些可选值做一个 INSERT。(可选的意思是如果子查询失败,我只想插入参数值而不是什么都不插入。)
我的第一次尝试是:
INSERT INTO my_table (foo, bar, something)
VALUES (:param, (SELECT bar, something FROM other_table WHERE (foo = :param));
但没有用。错误消息是“子选择必须只有一个字段”。
受这个问题启发的另一种方法是:
INSERT INTO my_table (foo, bar, something)
SELECT :param, o.bar, o.something FROM other_table o WHERE o.foo = :param;
但这仅执行INSERT
if 它为该WHERE
子句找到某些内容。所以它的行为与真正的子查询不同。所以我想出了这个:
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));
哪个有效,但由于两个子选择,当然看起来不必要的慢。
所以我的问题是:我能以某种方式让它只与一个子选择一起工作吗?