【问题标题】:Oracle Spatial query gives ORA-01427 (Single-row Subquery Returns More Than One Row)Oracle Spatial 查询给出 ORA-01427(单行子查询返回多于一行)
【发布时间】:2016-10-05 23:45:50
【问题描述】:

我正在地图上创建一个多边形并尝试获取与该多边形最相关的街道。但是,虽然我的查询在多边形覆盖 3-5 条街道时有效,但在覆盖更大区域时会返回上述错误。我试图从我的查询中获得至少一个街道代码结果。我错过了什么?

SELECT ID FROM STREET WHERE CITY_STREET_CODE = (
    SELECT 
         NS.CITY_STREET_CODE          CITYSTREETCODE
    FROM NEIGHBOURHOOD_STREET NS
    INNER JOIN NEIGHBOURHOOD N
      ON N.ID = NS.NEIGHBOURHOOD_ID
    WHERE SDO_RELATE(N.GEOLOC,
                    MYGEOLOC,
                    'MASK=ANYINTERACT') = 'TRUE'
     AND NS.CITY_STREET_CODE IN
         (SELECT CITY_STREET_CODE
            FROM (SELECT CITY_STREET_CODE, DISTANCE
                    FROM (SELECT
                           A.CITY_STREET_CODE, SDO_NN_DISTANCE(1) DISTANCE
                            FROM STREET A
                           WHERE SDO_NN(A.GEOLOC,
                                        MYGEOLOC,
                                        'SDO_BATCH_SIZE=10 DISTANCE=500 UNIT=M',
                                        1) = 'TRUE'
                             AND A.CITY_STREET_CODE > 0
                           ORDER BY DISTANCE)
                   WHERE ROWNUM <= 1))
                   )

ps:我尝试降低和增加批量大小,我也尝试用“sdo_num_res”代替它;两者都不起作用,或者是我做不好。

【问题讨论】:

  • 将第一个=改为in
  • 天哪,谢谢你好先生!您可以将其发布为回复,以便我标记它吗? (但有一点解释)

标签: oracle spatial spatial-query oracle-spatial


【解决方案1】:

您的问题与空间扩展无关。该问题是一个简单的 SQL 问题。你有:

WHERE CITY_STREET_CODE = ( . . . )

但是,子查询可以返回多于一行——因此会出现错误。

最简单的解决方案是将=改为IN

WHERE CITY_STREET_CODE IN ( . . . )

【讨论】:

  • 再次感谢您。我没有得到的是我用“ROWNUM
  • @AlpA。 . . .您正在子子查询中执行此操作。条件过于嵌套。
猜你喜欢
  • 2017-11-02
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多