比较两个不相关的表sql

时间:2016-12-29 21:27:25

标签: sql oracle plsql arcgis

我们正在使用我们的Oracle数据库处理地理数据。

有一个名为ST_Insertects(x,y)的函数,如果记录x与y相交,则返回true。

我们要做的是,将表A的每条记录与表B的所有记录进行比较,并检查两个条件

.cpp

我们正在寻找的结果只是来自表A的记录,它们满足上述所有3个条件

我们在一个选择语句中尝试了这个,但它似乎没有逻辑上的理解

2 个答案:

答案 0 :(得分: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列

交叉连接行匹配如下

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

因此,如果第1行在多行上的计算结果为true,则只需在a.Column1等上添加distinct。

答案 1 :(得分: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
              )