问题描述
如果我运行以下查询:
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
:-(