2016-12-29 82 views
-2

我們正在使用Oracle數據庫處理地理數據。比較兩個無關的表sql

有一個稱爲ST_Insertects(x,y)的函數,如果記錄x與y相交,則返回true。

我們正在試圖做的是,比較表B中的所有記錄表A的每個記錄,並檢查兩個條件

condition 1 : A.TIMEZONE = 1 (Timezone field is not unique) 
condition 2 : B.TIMEZONE = 1 
condition 3 : ST_Intersects(A.SHAPE, B.SHAPE) (Shape field is where the geographical information is stored) 

我們正在尋找的結果是隻能從表中的記錄一個滿足所有三個條件以上

我們試圖在這個單一的SELECT語句,但它似乎並沒有太大的意義邏輯

+0

有趣。 * 2 *條件是「條件1」,「條件2」和「條件3」?另外,考慮到普通SQL(Oracle實現)不知道布爾數據類型,您如何計劃使用函數的返回值?讓你的函數返回0或1(NUMBER數據類型)。 – mathguy

回答

0

如果要在Oracle SQL語句中使用函數的返回值,則需要更改函數以返回01(要麼'T'/'F' - Oracle數據庫支持的某些數據類型,它不支持布爾數據類型)。

,那麼你可能要像

select <columns from A> 
from A 
where A.timezone = 1 
    and exists (select * 
       from B 
       where B.timezone = 1 
        and ST_intersects(A.shape, B.shape) = 1 
      ) 
2

僞代碼,演示了一個交叉聯接:

select A.* 
from 
    tbl1 A, tbl2 B 
where 
    A.TIMEZONE = 1 and 
    B.TIMEZONE = 1 and 
    ST_Intersects(A.SHAPE, B.SHAPE) 

,如果你得到的倍數,你可以把一個獨特的,只有選擇A.XXX列

隨着交叉聯接,如果第1行的計算結果爲true的行都是這樣

a.row1 - b.row1 
a.row1 - b.row2 
a.row1 - b.row3 
a.row2 - b.row1 
a.row2 - b.row2 
a.row2 - b.row3 

所以匹配在多行上,然後在a.Column1上添加一個獨特的元素,等等。