比较两个无关的表sql
我们正在使用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语句,但它似乎并没有太大的意义逻辑
回答:
如果要在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
)
回答:
伪代码,演示了一个交叉联接:
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上添加一个独特的元素,等等。
以上是 比较两个无关的表sql 的全部内容, 来源链接: utcz.com/qa/260327.html