我有兩個表,一個包含國界,一個包含一個功能(例如電纜),我想知道它們位於哪個國家。無法合併條件與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')
任何人都可以解釋爲什麼我看到這種奇怪的行爲,我如何能夠最好地解決呢?使用物化視圖充其量只會讓人感到ha ha。
您的第一個查詢的結果是否包含'NL'作爲國家代碼的任何行? – micklesh
我的第一個查詢返回723行'NL'作爲國家代碼。也許它不夠清楚,但如果我首先將查詢轉換爲物化視圖,它就能正常工作(並且只能工作)。我會假設子查詢或額外的條件會類似地工作,我有點困惑它不。 – nathanvda