2016-06-06 2 views
0

지도에서 다각형을 생성하고 해당 다각형에 가장 가까운 거리를 가져 오려고합니다. 그러나 다각형이 3-5 개의 거리를 포함 할 때 내 쿼리가 작동하는 동안 더 큰 영역을 다룰 때 언급 한 오류를 반환합니다. 나는 내 쿼리에서 적어도 하나의 거리 코드 결과를 얻으려고합니다. 내가 뭘 놓치고 있니?Oracle Spatial 쿼리는 ORA-01427을 제공합니다 (단일 행 하위 쿼리는 둘 이상의 행을 반환합니다).

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"를 넣으려고했습니다. 둘 다 제대로 작동하지 못했습니다.

+1

변경 :

가장 간단한 해결책은 =IN 행을 변경하는 것이다. –

+0

거룩한 야옹, 고마워요! 내가 그것을 표시 할 수 있도록 응답으로 게시 할 수 있습니까? (그러나 조금 설명이 있습니다) – patateskafa

답변

1

문제점은 공간 확장과 관련이 없습니다. 이 문제는 간단한 SQL 문제입니다. 당신은이 :

WHERE CITY_STREET_CODE = (. . .) 

그러나, 하위 쿼리가 하나 개 이상의 행 반환 할 수 있습니다 - 따라서 오류가 발생했습니다. =```제 in`에

WHERE CITY_STREET_CODE IN (. . .) 
+0

다시 한번 감사드립니다. 내가 얻지 못하는 것은 결과 세트 크기를 "ROWNUM <= 1"으로 제한한다는 것입니다. 어떤 경우 에든 하나의 결과 만 리턴하도록되어 있지 않습니까? – patateskafa

+0

@ AlpA. . . . 하위 하위 쿼리에서이 작업을 수행하고 있습니다. 조건이 너무 중첩되어 있습니다. –

관련 문제