在oracle中将存在与空间查询一起使用会导致错误

问题描述

我尝试查询彼此相距130公里以内的所有物品。 如果我在where部分使用存在,则会出现异常:

这很好:

select *
from tbl_geometry g1,tbl_geometry g2
where sdo_within_distance(g1.GEOMETRY,g2.GEOMETRY,'distance=130 unit=km')='TRUE'
and g1.id <> g2.id;

在这里我得到一个例外:

select *
from tbl_geometry g1
where exists(
    select *
    from tbl_geometry g3
    where g1.id <> g3.id
    and sdo_within_distance(g1.GEOMETRY,g3.GEOMETRY,'distance=130 unit=km') = 'TRUE'
);

错误: [72000] [13226] ORA-13226:没有空间索引时不支持接口ORA-06512:在“ MDSYS.MD”行1723 ORA-06512:在“ MDSYS.MDERR”行8在ORA-06512:在“ MDSYS .SDO_3GL”,第1052行

添加另一个tbl_geometry实例可以“解决”问题:

select *
from tbl_geometry g1
where exists(
    select *
    from tbl_geometry g2,tbl_geometry g3
    where g2.id = g1.id
    and g2.id <> g3.id
    and sdo_within_distance(g2.GEOMETRY,'distance=130 unit=km') = 'TRUE'
    );

任何想法我都可以在没有理由的情况下不使用2 tbl_geometry来使用存在的东西。

谢谢。

解决方法

想看一些魔术吗?

您的查询:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
   <div class="box">
      <a href="https://cdn.pixabay.com/photo/2014/08/21/14/51/pet-423398__180.jpg" class="image">
         <img src="https://cdn.pixabay.com/photo/2014/08/21/14/51/pet-423398__180.jpg" alt="image">
      </a>
      <div class="con-text">  // Magnific popup doesn't work anymore when I add this div
         <h2>Title</h2>
      </div>
   </div>
</div>

我的查询:

SQL> SELECT COUNT(*)
  2    FROM tbl_geometry g1
  3   WHERE EXISTS
  4            (SELECT *
  5               FROM tbl_geometry g3
  6              WHERE     g1.id <> g3.id
  7                    AND sdo_within_distance (g1.geometry,8                                             g3.geometry,9                                             'distance=130 unit=km') = 'TRUE');
SELECT COUNT(*)
*
ERROR at line 1:
ORA-13226: interface not supported without a spatial index
ORA-06512: at "MDSYS.MD",line 1723
ORA-06512: at "MDSYS.MDERR",line 8
ORA-06512: at "MDSYS.SDO_3GL",line 1082

您能发现差异吗?没有?在这里:

SQL> SELECT COUNT(*)
  2    FROM tbl_geometry g1
  3   WHERE EXISTS
  4            (SELECT *
  5               FROM tbl_geometry g3
  6              WHERE     g1.id <> g3.id
  7                    AND sdo_within_distance (g3.geometry,8                                             g1.geometry,9                                             'distance=130 unit=km') = 'TRUE');

  COUNT(*)
----------
       815

SQL>

vs。

  7                    AND sdo_within_distance (g1.geometry,--> g1
  8                                             g3.geometry,--> g3
  9                                             'distance=130 unit=km') = 'TRUE');

为什么?我不知道。但这有效。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...