我们正在使用我们的Oracle数据库处理地理数据。
有一个名为ST_Insertects(x,y)的函数,如果记录x与y相交,则返回true。
我们要做的是,将表A的每条记录与表B的所有记录进行比较,并检查两个条件
.cpp
我们正在寻找的结果只是来自表A的记录,它们满足上述所有3个条件
我们在一个选择语句中尝试了这个,但它似乎没有逻辑上的理解
答案 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语句中使用函数的返回值,则需要更改函数以返回0
或1
(或'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
)