2016-05-30 22 views
1

国境を含むテーブルと機能(ケーブルなど)を含むテーブルが2つあり、その国がどこにあるかを知りたいと思います。条件をSDO_CONTAINS/SDO_RELATEと組み合わせることができません

だから私は、次のクエリを使用します。

select cc.country_code, ca.* 
from CABLES ca, COUNTRIES cc 
where sdo_contains(cc.geometry, ca.geometry) = 'TRUE' 

これは動作します:私は、各ケーブル国コードのために明確なリストを取得します。

今私はオランダで横たわっているすべてのケーブルを選択したいので、私のような何か書く:

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-clause、sdo_relateを使用していて、すべて同じ効果があります:選択された行がありません。私はビューを使ってみましたが、内部的にサブクエリを書くのと同じ効果があると思います。

SDO_ANYINTERACTを使用している場合は、条件country_code = 'NL'を追加して結果を得ることができますが、私には同じ結果(明らかに?)はありません。

次のようにビューを定義する奇妙なこと:

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をやって???

マテリアライズド・ビュー使用され、これまで取り組んできました唯一の解決策:私はこの奇妙な行動とどのように私は最高のこのに取り組むことができを参照してください理由

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') 

は誰も説明できますか?マテリアライズド・ビューを使用すると、最高でもハック感があります。

+0

最初のクエリの結果に「NL」の国コードが含まれていますか? – micklesh

+0

私の最初のクエリは、国コードとして 'NL'を含む723行を返します。多分それは十分ではなかったかもしれませんが、最初にマテリアライズド・ビューに問合せを変換すると、正しく動作し、動作します。サブクエリや余分な条件も同様に機能すると思いますが、私はそれほど困惑しています。 – nathanvda

答えて

0

あなたはあなたのケースで/*+ ordered */ヒント

を使用する必要があり、SQLは次のようにする必要があります:国が内部...でケーブルを持っているので、私は、sdo_containsを変更した

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'; 

注意あなたのクエリはそれ以外の場合

関連する問題