2013-02-08 45 views
3

時,我有這樣的查詢:PostgreSQL只返回結果添加額外的條款及

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通過Postgres.app使用PostGIS 9.2.2.0。

+1

請保留「bug」或「bugs」的使用 - 特別是在成熟的產品上 - 直到經過重要的測試和驗證。它可能或可能不是,但不要求:) – 2013-02-08 02:52:05

+0

我真的很希望我做錯了什麼,但是我不能爲了我的生活找出它可能是什麼...... – nate777

+5

減少你的數據集並舉例說明儘可能小的問題仍然存在,那麼你要麼看到你的問題是什麼,要麼是你向社區提出的最小問題實例,你現在的問題只會提示猜測。 – wich

回答

1

一個猜測。

uniroads.osm_id看起來像一個密鑰,因此它最有可能被索引。

AND uniroads.osm_id='23334071'子句導致(另一個,也許?)索引被使用,因此這可能意味着(某些?)原來使用的索引被破壞。

也許以下可能會有所幫助?

REINDEX TABLE boroughs; 
REINDEX TABLE uniroads; 

在任何情況下,EXPLAIN ANALYZE想爲這兩個查詢,以及參與表的完整定義。