我有这样的疑问:

SELECT boroughs.name
FROM boroughs, uniroads
WHERE uniroads.normalizedName='6 AVENUE'
AND st_intersects(boroughs.geometry, uniroads.way)
AND boroughs.name='Brooklyn'

0 results

但当我运行它时,它不会返回任何结果。但是,我可以在表中找到希望它返回的特定行,当我添加一个子句来请求该特定行时,它可以正常工作:
SELECT boroughs.name
FROM boroughs, uniroads
WHERE uniroads.normalizedName='6 AVENUE'
AND st_intersects(boroughs.geometry, uniroads.way)
AND boroughs.name='Brooklyn'
AND uniroads.osm_id='23334071'

1 result

我通过Postgres.app将Postgres 9.2.2.0与PostGIS一起使用。

最佳答案

猜猜看。
uniroads.osm_id看起来像一个键,因此它很可能被索引。
AND uniroads.osm_id='23334071'子句导致(另一个,也许?)要使用的索引,因此这可能意味着(某些?)最初使用的索引已损坏。
也许下面这句话会有帮助?

REINDEX TABLE boroughs;
REINDEX TABLE uniroads;

无论如何,这两个查询都需要EXPLAIN ANALYZE,以及所涉及表的完整定义。

关于sql - PostgreSQL仅在添加其他AND子句时返回结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14764894/

10-09 22:44