首页 > 解决方案 > 使用 SDO_CONTAINS 的 Oracle Spatial Query 结果不一致

问题描述

如果我运行以下查询:

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
     , fid
     , 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

标签: oraclespatialoracle11gr2spatial-queryoracle-spatial

解决方案


显然某处存在错误。如果我运行:

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, 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  34

:-(


推荐阅读