首页 > 解决方案 > 尝试在表中插入多行时,由于用作表达式的子查询返回多行而出现错误

问题描述

我正在尝试将多个值从 postgresql 中的不同表插入到表中,并遇到 [21000] 错误:错误:用作表达式的子查询返回的不止一行

INSERT INTO coupon (id,entityid)
values
(select nextval('seq_coupon')),(select entityid from card where country in ('China')));

此查询 [select entityid from card where country in ('China'))] 有多行。

任何帮助深表感谢。

标签: postgresqlsql-insert

解决方案


如果要插入来自 SELECT 查询的行,请不要使用该values子句。用于第二列值的 SELECT 查询返回多行,这在需要单个值的地方是不允许的。

要为所有新插入的行包含一个常量值,只需将其添加到源查询的 SELECT 列表中。

INSERT INTO coupon (id, entityid, coupon_code)
select nextval('seq_coupon'), entityid, 'A-51'
from card
where country in ('China');

附带说明:使用时nextval(),即使在 values 子句中,也无需在其前面加上 SELECT 前缀,例如

insert into coupon (id, entityid) 
values (nextval('some_seq'), ...);

推荐阅读