在查询的其他部分中使用where变量的值

时间:2012-05-20 17:04:00

标签: sql postgis

无论如何,我可以在查询中的其他地方使用where选项的值吗?我想要做的是用postgis获取地图中的点,并在视图中返回距离,以便我有这个工作

SELECT name, 
       ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-110 29)')::geography, location:: geography) 
FROM global_points 
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000);

虽然这对单个查询很有用,但我想使用一个视图来连接其他表中的一些其他信息,以便我可以做到

SELECT * FROM view WHERE currLoc = POINT(50 50)

那么我就可以在视图的其余部分使用currLoc我正在尝试的是这样的事情

CREATE VIEW testDis 
AS
SELECT name, ST_Distance(currPos::geography, latlong::geography) 
FROM global_points;

这可能完全错了,但我不确定我还能做些什么。

由于

1 个答案:

答案 0 :(得分:1)

视图不能包含参数,但您可以创建一个可以执行此操作的set return函数:

有些事情:

create function testDis(currPos geography, latlong geography)
   returns table(text, float)
as $$
  SELECT name, ST_Distance($1, $2) 
  FROM global_points;
$$
language sql;

(抱歉,我不知道PostGIS,所以我的数据类型可能不对)

根据上述定义,您可以执行以下操作:

select * from testDis(foo, bar);

其中foo和bar是approriatly类型的值。