2009-07-20 4 views
0

내가이 쿼리를 실행하기 위해 노력하고있어하지만 난 "ORA-00904 :"얻을 Z1 경도 "." "유효하지 않은 식별자"오라클 SQL 잘못된 식별자

그래서 난에 대한 액세스 권한이를 다시 작성하는 방법이 있나요 존재하는 하위 쿼리의 해당 열? 또는 일반적으로 내가하려는 일을 성취하기위한 더 좋은 방법이 있습니까?

감사

select zip, count(UNIQUE address_id) LOCATIONS 
from records 
inner join addresses a using(address_id) 
inner join zip_coords z1 using(zip) 
where exists 
(
    select 1 from (
    select distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) d 
    from zip_coords z2 
    where z2.zip in (
     select zip from available_zips 
    ) 
) where d <= 50 
) 
GROUP BY ZIP 

답변

2

귀하의 문제는 당신이 당신의 하위 쿼리에 많은 수준을 내려갈 수 없다는 것입니다. 나는 당신의 쿼리를 통해 감추고에서 뭔가를 놓친하지만 수도 수 :

select 1 from (
    select distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) d 
    from zip_coords z2 
    where z2.zip in (
     select zip from available_zips 
    ) 
) where d <= 50 

다시 쓰지 :

inner join zip_coords z1 using(zip) 

시도를 포함 zip_coords이 일환으로 Z1 :

SELECT 1 
FROM zip_coords z2 
WHERE z2.zip IN (
    SELECT zip FROM available_zips 
) 
AND distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude) <= 50 
+0

둥지와 관련이 있다고 생각했습니다. 이 문제가 해결 된 것 같습니다. –

0

대신 사용 FROM 절을 사용하고 WHERE에 조인을 포함하십시오. 하위 쿼리에서 z1에 액세스 할 수 있어야합니다.

1
 
select zip, count(UNIQUE address_id) LOCATIONS 
from records 
inner join addresses a using(address_id) 
inner join zip_coords z1 using(zip) 
where 
(
    select min(distance(z1.latitude, z1.longitude, z2.latitude, z2.longitude)) d 
    from zip_coords z2 
    inner join available_zips using(zip) 
) <= 50 
GROUP BY ZIP 

나는 이것이 쿼리의 성능에 어떤 영향을 미치는지 모른다.

+0

성능에 많은 영향을 미치지 않았습니다. 성능은 이미 매우 끔찍했고 결과를 얻는 것이 오류를 얻는 것보다 훨씬 낫습니다. –