我想使用以下内容创建查询:
select id, array(id_adj(id)) from existingtable
这将是两列:1表示id,第2列表示整数数组。
函数id_adj返回一组行(单列整数),编写如下:
DROP FUNCTION IF EXISTS id_adj(hz_id int);
CREATE FUNCTION id_adj(id int) returns SETOF int AS $$
select b.id
from existingtable a, existingtable b
where a.id != b.id
and a.id=$1
and ST_Distance(a.wkb_geometry, b.wkb_geometry) <= 0.05
$$LANGUAGE SQL
上述功能适用于单个ID。例如:
select id_adj(462);
返回包含整数值的单个列。
我知道array()函数返回一个给定SELECT语句查询结果的值数组。例如:
select array(select id from existingtable where id<10);
返回一个数组&#34; {6,5,8,9,7,3,4,1,2}&#34;。
但将两者结合起来似乎并不奏效。请注意,虽然我使用上面的postgis ST_Distance函数,但不需要测试我的问题的解决方案。
我也开放让函数返回一个数组而不是一组setof记录,但这一开始看起来更复杂。
答案 0 :(得分:1)
您缺少select
声明
select
id,
array(select id_adj(id))
from existingtable