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

如何在PostgreSQL中对视图每行的数组列应用自定义集合合并函数

解决PostgreSQL视图数组列逐行计算并集的问题

问题描述

我有一个包含两个数组列的视图cj_of_skills,查询语句:

select * from cj_of_skills

已定义计算数组并集的函数:

create or replace function set_union(A anyarray, B anyarray) 
returns anyarray as
$$
   select array(select unnest(A) union select unnest(B) order by 1);
$$ language sql;

执行以下语句时出现错误:

select * from set_union((select s1 from cj_of_skills ), (select s2 from cj_of_skills)) 

错误信息:ERROR: more than one row returned by a subquery used as an expression

错误原因

你的调用方式是把整个列的所有行数据作为参数传给set_union函数,但函数需要的是单行的两个数组值,子查询返回了多行结果,导致参数不符合要求。

正确解法

直接对视图的每行数据调用函数,将每行的s1和s2作为参数传入:

select 
    s1,
    s2,
    set_union(s1, s2) as array_union
from cj_of_skills;

这样就能逐行计算每行两个数组的并集,同时保留原列数据,结果会包含原数组列和对应的并集列。

如果不需要保留原列,只需要并集结果,可以简化为:

select set_union(s1, s2) as array_union
from cj_of_skills;

内容的提问来源于stack exchange,提问作者Saurabh Damle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:12:51