2016-12-29 8 views
-2

私たちはOracleデータベースで地理データを扱っています。2つの無関係なテーブルを比較するsql

レコードxがyと交差すると、trueを返すST_Insertects(x、y)という関数があります。私たちが何をしようとして

は、テーブルBのすべてのレコードを持つテーブルAの各レコードを比較し、であり、2つの条件

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) 

をチェックし、私たちが探している結果は、ONLYのテーブルからのレコードであります

私たちは、単一のSELECT文でこれを試みたが、クロス加入証明する多くの論理的意味

+0

興味深いのような何かをしたいです。 * 2つの条件は「条件1」、「条件2」、「条件3」ですか?また、プレーンSQL(Oracle実装)がブール型データ型を認識していないことを考慮して、関数からの戻り値をどのように使用する予定ですか?関数の戻り値を0または1(NUMBERデータ型)にします。 – mathguy

答えて

0

Oracle SQL文で関数の戻り値を使用する場合は、関数を変更して0または1を戻す必要がありますまたは'T'/'F' - ブール・データ型をサポートしないOracle Databaseでサポートされている一部のデータ型)。

あなたはおそらく

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

擬似コードを作成していないようです上記のすべての3つの条件を満たしている:

あなたが倍数を取得する場合
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などで別名を追加するだけです。

関連する問題