2012-02-12 2 views
1

예를 추가하는 변경해야합니다는 어떻게 구문이 'WHERE'절

SELECT s.title, t.description, 
u1.value * s.cache_value as Cache, 
u2.value * s.drive_value as Drive, 
u3.value * s.error_value as Error, 
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh, 
u3.value * s.error_value - u3.value * s.error_value as ErrorLow, 
m.area 
FROM storage s 
JOIN status t on t.id = s.status_id 
JOIN manufac m on m.id = s.area 
JOIN unit u1 on s.cache_unit_id = u1.id 
JOIN unit u2 on s.drive_unit_id = u2.id 
JOIN unit u3 on s.error_unit_id = u3.id 

원하는 목표 :

SELECT s.title, t.description, 
u1.value * s.cache_value as Cache, 
u2.value * s.drive_value as Drive, 
u3.value * s.error_value as Error, 
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh, 
u3.value * s.error_value - u3.value * s.error_value as ErrorLow, 
m.area 
FROM storage s 
JOIN status t on t.id = s.status_id 
JOIN manufac m on m.id = s.area 
JOIN unit u1 on s.cache_unit_id = u1.id 
JOIN unit u2 on s.drive_unit_id = u2.id 
JOIN unit u3 on s.error_unit_id = u3.id 
WHERE 123 BETWEEN ErrorHigh AND ErrorLow; 

MySQL을 반환 구문 오류 알 수없는 열 ErrorHigh

참고 : ErrorHigh 및 'ErrorLow`는 계산 된 값을 표시하기 위해 만든 새 열입니다.

+0

가 http://stackoverflow.com/questions/9197215/fighting-inner-join-unknown-column-when-trying- 참조 :이처럼 - 그렇지 않으면, 당신은 그것을 나타내는 조작으로 열 별칭을 대체 할 수 피할 - 반복 - 저장된 함수/9197376 # 9197376 – Kaii

답변

4

SQL은 WHERE 절에서 열 별칭을 참조 할 수 없기 때문에 1054 오류가 발생합니다. 가장 오래된 MySQL 지원은 GROUP BY입니다. 그러나 대부분의 다른 데이터베이스는 ORDER BY 절에서 열 별칭 만 지원합니다.

계속해서 컬럼 별명을 사용하려면, 표시되는 조작은 subselect, 파생 테이블/인라인보기에서 수행되어야합니다.

WHERE 123 BETWEEN u3.value * s.error_value + u3.value * s.error_value 
       AND u3.value * s.error_value - u3.value * s.error_value 
+0

아 .. 알았어. 정말 고마워요 OMG Ponyies – stackoverflow

+0

subselect 접근법의 예와 설명은 여기에 있습니다 : http://stackoverflow.com/questions/9197215/fighting-inner-join-unknown-column-when-trying-to-avoid-a-repeated- stored-func/9197376 # 9197376 – Kaii