Oracle Spatial 查询给出 ORA-01427(单行子查询 Returns 多于一行)

Oracle Spatial query gives ORA-01427 (Single-row Subquery Returns More Than One Row)

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

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" 代替它;两个都不行,还是我做的不好

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

WHERE CITY_STREET_CODE = ( . . . )

但是,子查询可以 return 多行 - 因此会出现错误。

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

WHERE CITY_STREET_CODE IN ( . . . )