如何在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
相关产品推荐
相关产品推荐

