首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时从使用这些表的值的表和函数中选择

同时从使用这些表的值的表和函数中选择
EN

Stack Overflow用户
提问于 2012-09-13 17:09:35
回答 1查看 55关注 0票数 1

我有三张桌子:闪电,电线,桅杆。

主要领域:

  • lightnings.geo_belief -一个可能命中的椭圆。
  • powerlines.geo_path -电力线路径的一条地理折线。
  • masts.geo_coordinates -桅杆放置的地理点。

任务

  1. 计算击中电力线走廊(5000米-其半径,并由函数powerline_corridor()生成的几何形状)的雷击次数
  2. 获取有关电力线桅杆的信息,距离各自雷击最近,并获得距离lightning.geo_ellipsemasts.geo_coordinates

所以我可以选择闪电:

代码语言:javascript
复制
SELECT l.*
FROM lightnings l
JOIN ( SELECT geo_path, powerline_corridor(geo_path, 5000::smallint) AS geo_zone 
         FROM powerlines WHERE id=1)
   AS by_pl
   ON ST_Intersects(by_pl.geo_zone, l.geo_belief)

另外,我还得到了函数namos_nearest_mast(powerlines.id, lightnings.geo_belief)

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION public.namos_nearest_mast (
  powerline_id integer,
  geo public.geometry
)
RETURNS public.obj_powerline_masts AS
$body$
SELECT *
FROM obj_powerline_masts
WHERE powerline_id=$1
ORDER BY $2 <-> geo_coordinates ASC
LIMIT 1
$body$
LANGUAGE 'sql';

你不能为选择提出好的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2012-09-13 17:09:35

以下是我一个人所做的一切:

代码语言:javascript
复制
SELECT 
    t.*,
    ROUND(st_distance(namos_transform_meters(m.geo_coordinates), namos_transform_meters(t.geo_belief))) AS dist_m
FROM obj_powerline_masts AS m
JOIN
  (
    SELECT 
    l.*,
    (SELECT id FROM nearest_mast(1, l.geo_belief)) AS mast_id
    FROM lightnings l
    JOIN (SELECT geo_path, powerline_corridor(geo_path, 5000::smallint) AS geo_zone FROM powerlines WHERE id=1) AS by_pl ON ST_Intersects(by_pl.geo_zone, l.geo_belief)
    LIMIT 50 OFFSET 50
  ) AS t
  ON t.mast_id=m.id

但我不确定这是否是一个最佳解决方案。例如,在PHP中,我不能将dataProviders应用于这样的查询(这是抽象的,例如,使用分页),因为我们不能以一种微不足道的方式影响子查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12411406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档