You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL插入时遇子查询返回多行错误,求解决方案

问题解决:子查询返回多行导致INSERT报错

错误原因

你SELECT列表里的(SELECT consent_id ...)子查询会返回多个符合条件的consent_id,但作为单个字段的表达式时,SQL只允许子查询返回1行结果,因此触发more than one row returned by a subquery used as an expression错误。

修正后的代码

要实现“为每个符合条件的consent_id创建一条新的状态记录”,应该把生成UUID的逻辑和子查询做关联查询,而不是把子查询放在字段位置:

INSERT INTO payment_consent_state (
    id,
    consent_id, 
    status, 
    created_at
)
SELECT 
    -- 生成UUID的逻辑保持不变
    uuid_in(overlay(overlay(md5(random()::text || ':' || random()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring) as id,
    sub.consent_id,
    'REJECTED' as status,
    now() as created_at
FROM (
    -- 原查询作为子查询,获取所有符合条件的consent_id
    SELECT consent_id 
    FROM payment_consent_state
    WHERE created_at < current_timestamp - interval '185 minutes'
    GROUP BY consent_id
    HAVING COUNT(consent_id) = 1
) AS sub;

逻辑说明

  • 子查询sub先筛选出所有满足条件的consent_id;
  • 主查询为每个consent_id生成一个唯一UUID,同时填充状态REJECTED和当前时间作为created_at;
  • 最终会为每个符合条件的consent_id插入一条新的记录。

内容的提问来源于stack exchange,提问作者Joao Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:30:50