2015-01-09 5 views
0
select tableA.*,tableB.*, 
111.045* DEGREES(ACOS(COS(RADIANS(tableA.latitude)) * COS(RADIANS(tableB.latitude)) * COS(RADIANS(tableA.longitude) - 
RADIANS(tableB.longitude)) + SIN(RADIANS(tableA.latitude)) * SIN(RADIANS(tableB.latitude)))) AS distance_in_km 
from table A 
join(select tableB.latitude,tableB.longitude from tableB) 
on tableA.id = tableB.id HAVING distance <10 

이 쿼리는 작동하지만 테이블 A의 첫 번째 행만 비교하고 비교합니다 테이블 B의 행과 함께. 그러나 테이블 A의 모든 행 위도/경도가 표 B의 모든 위도/경도와 비교되어야합니다.테이블 A의 여러 행과 테이블 B의 여러 행을 비교하는 방법

답변

1

, 즉

select tableA.*,tableB.*, 
111.045* DEGREES(ACOS(COS(RADIANS(tableA.latitude)) * COS(RADIANS(tableB.latitude)) * COS(RADIANS(tableA.longitude) - 
RADIANS(tableB.longitude)) + SIN(RADIANS(tableA.latitude)) * SIN(RADIANS(tableB.latitude)))) AS distance_in_km 
from tableA 
cross join tableB 
HAVING distance <10 
0

JOIN 대신에 LEFT JOIN을 사용해보십시오. 당신이 십자가에 가입해야 TableB의 각 행과 TABLEA에서 각 행에 합류하기 위해

+0

시도. 그러나 같은 결과 – Mithran

관련 문제