首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用SDO_CONTAINS/SDO_RELATE组合条件

无法使用SDO_CONTAINS/SDO_RELATE组合条件
EN

Stack Overflow用户
提问于 2016-05-30 20:11:16
回答 1查看 209关注 0票数 1

我有两个表,一个包含国家边界,另一个包含一个特征(例如电缆),我想知道它们位于哪个国家。

因此,我使用以下查询:

代码语言:javascript
复制
select cc.country_code, ca.*
from CABLES ca, COUNTRIES cc
where sdo_contains(cc.geometry, ca.geometry) = 'TRUE'

这是可行的:我得到了一个清晰的列表,每个电缆都有一个国家代码。

现在我想选择位于荷兰的所有电缆,所以我的代码如下:

代码语言:javascript
复制
select cc.country_code, ca.*
from CABLES ca, COUNTRIES cc
where sdo_contains(cc.geometry, ca.geometry) = 'TRUE'
  and cc.country_code = 'NL' 

突然间我就有了no rows selected

我尝试了各种替代方法:使用子查询、with-子句、sdo_relate,它们都有相同的效果:没有选择任何行。我尝试使用视图,但我猜这与在内部编写一个子查询具有相同的效果。

当使用SDO_ANYINTERACT时,我可以添加条件country_code = 'NL'并获得一些结果,但它不会给我相同的结果(显然?)。

奇怪的是,视图的定义如下:

代码语言:javascript
复制
create or replace view cables_with_country as 
  select cc.country_code, ca.*
  from cables ca, countries cc
  where (sdo_contains(cc.geometry, ca.geometry) = 'TRUE')

然后执行select count(*) from cables_with_country返回0?

到目前为止,唯一有效的解决方案是使用物化视图:

代码语言:javascript
复制
create materialized view cables_with_country_mv as 
  select cc.country_code, ca.*
  from cables ca, countries cc
  where (sdo_contains(cc.geometry, ca.geometry) = 'TRUE')

谁能解释一下为什么我会看到这种奇怪的行为,以及我如何才能最好地解决这个问题?使用物化视图给人的感觉充其量是一种黑客的感觉。

EN

回答 1

Stack Overflow用户

发布于 2018-03-07 02:22:39

您必须使用/*+ ordered */提示

在您的示例中,SQL应如下所示:

代码语言:javascript
复制
select /*+ ORDERED */ 
cc.country_code, ca.all
from  COUNTRIES cc,CABLES ca -- in this order
where sdo_contains(ca.geometry,cc.geometry) = 'TRUE'
  and cc.country_code = 'NL';

请注意,我已经更改了sdo_contains,因为country内部有电缆...在您的查询中是不同的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37525349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档