Oracle SQL Developer中多关联查询下的空间左连接实现方法
Oracle多表左连接中添加空间包含条件的实现
我需要查询一组混合空间与非空间数据的数据集,部分表包含MDSYS.SDO_GEOMETRY类型的空间数据,部分则没有。当前已编写多左关联查询语句,需给table1与table5的左连接添加table1.col3空间几何对象包含于table5.col2空间几何对象的条件,使用环境为Oracle SQL Developer。
原查询代码:
select table1.col1, table1.col2, table2.col5, table2.col3, table3.col1, table3.col2, table4.col9, table5.col1 -- 这是空间关联返回的数据 from table1 left join table2 on table2.col1 = table1.col1 left join table3 on table3.col5 = table1.col6 left join table4 on table4.col2 = table1.col1 left join table5 on -- 此处需添加空间几何条件:table1的col3包含于table5的col2 group by table1.col1, table1.col2, table2.col5, table2.col3, table3.col1, table3.col2, table4.col9
修改后的完整查询代码:
select table1.col1, table1.col2, table2.col5, table2.col3, table3.col1, table3.col2, table4.col9, table5.col1 -- 这是空间关联返回的数据 from table1 left join table2 on table2.col1 = table1.col1 left join table3 on table3.col5 = table1.col6 left join table4 on table4.col2 = table1.col1 left join table5 on SDO_CONTAINS(table5.col2, table1.col3) = 'TRUE' group by table1.col1, table1.col2, table2.col5, table2.col3, table3.col1, table3.col2, table4.col9, table5.col1
关键说明:
- 使用Oracle Spatial内置的
SDO_CONTAINS函数实现空间包含判断,参数顺序为包含几何在前,被包含几何在后(即SDO_CONTAINS(容器几何, 被包含几何)),函数返回值为'TRUE'或'FALSE' - 左连接逻辑会保留table1的所有数据行,即使table5中没有匹配的空间几何记录,此时table5的所有字段会返回NULL
- 为保证查询性能,需确保table1.col3和table5.col2对应的空间数据已正确创建空间索引
内容的提问来源于stack exchange,提问作者cpljp
相关产品推荐
相关产品推荐

