2013-07-16 6 views
0

이 테이블 (CountryID, iata_code, 위도, longtiute) 열이 Cities_no_iata 나는 두 개의 테이블이가장 가까운 숫자 값으로 업데이트하는 방법

이 테이블 (CountryID, iata_code, 위도, longtiute)

열이 Cities_iata

첫 번째 표는 그래서 가장 가까운 도시 iata_code을 복사 할

두 번째 표는 iata_code에게

이 도시가 포함되어 있으므로 iata_code 열의 모든 행이 null의 iata_code하지 않은 도시를 포함 iata_code하지 않은 도시로, 나는 두 도시

2 - 두 가지의 동일한 CountryID에 대한 2 가지

1 가장 가까운 곳 (위도와 경도)에 의해이 일을 생각 도시. 하지만

Update Cities_iata 
JOIN Cities_no_iata USING (CountryID) 
Where ABS(cities_iata.latitude)= ABS(Cities_no_iata.latitude) 
AND ABS(cities_iata.longitude)= ABS(Cities_no_iata.longitude) 
AND cities_iata.CountryID = Cities_no_iata.country_id 
set( Cities_no_iata.iata_code =cities_iata.iata_code); 

이 쿼리가 유클리드 공식을 사용하여 거리를 근사

+1

가장 가까운 도시를 만들기 위해 훨씬 더 복잡한 수식을 사용해야합니다. http://sylnsr.blogspot.co.uk/2012/12/find-nearest-location-by-latitude-and.html을 확인하십시오. 그게 무슨 일을하고 싶은지 – Lee

+0

이 코드는 내가 가장 가까운 도시를 선택하는 것이 좋지만 테이블에서 다른 테이블로 업데이트하는 방법 – user1673473

답변

2

작동니까. 실제로 근사값의 경우에도 위도의 단위 차이는 위도에 따라 경도와 다름을 고려해야합니다. 위도 차이에 코사인을 곱해야합니다.

그러나이 질문은 실제로 특정 거리 공식에 대한 것이 아니라 가장 가까운 것을 찾는 것에 대한 것입니다. 다음 쿼리는 없음으로 테이블에 도시의 가장 가까운 IATA 코드를 반환 : 우리는 join를 사용하여 update이 점을 설정할 수 있습니다

select cni.*, 
     (select iata_code 
     from cities_iata ci 
     order by pow(cia.latitude - ci.latitude, 2) + pow(cia.longitude - ci.longitude, 2) 
     limit 1 
     ) as new_iata_code 
from cities_no_iata cni; 

:

update cities_no_iata join 
     (select cni.*, 
       (select iata_code 
       from cities_iata ci 
       order by pow(cia.latitude - ci.latitude, 2) + pow(cia.longitude - ci.longitude, 2) 
       limit 1 
       ) as new_iata_code 
     from cities_no_iata cni 
     ) upd 
     on cities_no_iata.latitude = upd.latitude and 
      cities_no_iata.longitude = upd.longitude 
    set iata_code = upd.iata_code; 

두 의견. order by 절에 원하는 거리 함수를 넣을 수 있으므로 원하는대로 일반화해야합니다. 둘째, 각 행에 대해 고유 한 식별자가 있어야하므로 최종 결합은 위도와 경도가 아닌 도시 식별자로 수행 할 수 있습니다.

+0

이 오류가 발생 # 1054 - 알 수없는 열 'cia.latitude'in 'order clause'.. 그래서 무엇 cia point가 무엇입니까? – user1673473

+0

나는이 고유 한 식별자가 이미 cittyid입니까? .. 어떻게 사용합니까? – user1673473

관련 문제