2011-08-16 2 views
0

에 둥지 여러 SELECT 문에 대한 올바른 방법은 무엇입니까 나는 다음과 같은 쿼리가 :는 MySQL의

SELECT 
locations.*, 
(SELECT COUNT(id) FROM location_scores WHERE location_id = locations.id) AS total_votes, 
(SELECT AVG(location_score) FROM location_scores WHERE location_id = locations.id) AS rating, 
(SELECT COUNT(id) FROM location_views WHERE location_id = locations.id) AS total_views, 
(SELECT COUNT(id) FROM location_procedures WHERE location_id = locations.id) AS total_procedures, 
(SELECT ((ACOS(SIN(32.9063840 * PI()/180) * SIN(location_latitude * PI()/180) + COS(32.9063840 * PI()/180) * COS(location_latitude * PI()/180) * COS((-96.8590890 - location_longitude) * PI()/180)) * 180/PI()) * 60 * 1.1515) FROM locations) AS distance 
FROM locations 
WHERE distance <= '5' 
AND locations.id IN ('57', '57', '57', '57', '57', '57', '57', '57', '57', '57', '68', '68', '70', '73', '73', '76', '76', '76', '76', '76', '77', '77') 

나는 다음과 같은 오류가 계속 :

Unknown column distance in where clause

+0

일반적으로는, 일반적으로 서브 쿼리보다 더 나은 수행 조인 :

SELECT (... FROM locations) AS distance 

어쩌면, 당신은 어디 clase을 잊지 하위 쿼리. 조인을 사용하여 다시 작성하는 것이 좋습니다. – shesek

답변

1

distance 테이블의 이름을, 란 아닙니다.

마지막으로 긴 서브 쿼리 다음에 AS column_name을 넣으면 다음과 같이 액세스 할 수 있습니다.

WHERE distance.column_name <= 5

+0

아니요, 마지막 하위 쿼리를 확인하십시오. 계산 거리를 선택합니다 –

+0

테이블에서 선택하는 경우, 테이블 전체를 의미하는 마지막 괄호가 '거리'로 표시됩니다. 하나의 값이 포함되어 있더라도, 테이블 별명은'distance'이며, 그 테이블에있는 값을 가져와야합니다. –

0

거리 테이블 것으로 보인다. 단순화 된 쿼리 : 쿼리 플래너가 함께 할 수있는 것보다 훨씬 더 잘 최적화 할 수 있기 때문에,

SELECT (... FROM locations WHERE location_id = locations.id) AS distance