我有一个查询,针对每个地址位置(广告),搜索半径为50米的最近的街道(st),并返回(260行)具有相应地址位置的所选街道。表'ad'包含87行,而'st'包含16,060行。执行时间为61毫秒。代码如下:
SELECT
ad.gid As address_id,
ST_AsText(ad.geom) As address_locations,
ST_AsText(st.geom) As selected_streets
FROM ad
Left JOIN st ON ST_DWithin(ad.geom, st.geom, 50)
ORDER BY ad.gid, St_Distance(ad.geom, st.geom);
现在,我想以编程方式打破此查询,以便:对于每个地址位置,搜索首先在半径30米内执行,如果找到街道,请选择它们,然后将搜索距离扩展到50米不在半径30米。怎么做?