使用SDO_CONTAINS的Oracle Spatial查询的结果不一致

问题描述

如果我运行以下查询

select zona,fid,count(*)
from geo_bcn_zones z join geo_bcn_illes i 
  on SDO_CONTAINS(z.geometria,i.geometria) = 'TRUE'
where zona='z01'and fid = 53
group by zona,fid

我得到以下结果:

 zona   fid count(*)
 z01    53  34      

但是,如果我再运行另一个

select zona,count(*)
from geo_bcn_zones z
join geo_bcn_illes i 
on SDO_CONTAINS(z.geometria,i.geometria) = 'TRUE'
where zona='z01'
group by zona,fid
having fid = 53

结果不一致:

 zona   fid count(*)
 z01    53  10      

有什么建议吗?

我正在Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

解决方法

很明显,某个地方有一个错误。如果我运行:

select zona,fid,count(*)
from geo_bcn_zones z,geo_bcn_illes i 
where sdo_contains(z.geometria,i.geometria) = 'TRUE'
and zona = 'z01' and fid = '53'
group by zona,fid

结果是:

zona fid count(*)
z01 53  10

如果我添加匹配项以避免索引:

select /*+NO_INDEX(z,idx_geo_bcn_zones) */  zona,fid

结果正确:

zona fid count(*)
z01 53  34

:-(