2013-12-13 2 views
0

의 조항이 작동하는 곳에서 사용할 수 없습니다 이유 :변수가이 문을 MySQL을 사용 mysql을

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
     UNIX_TIMESTAMP('2013-11-14 14:35:21')) as diff from Alert 
order by diff 
limit 3 

을하지만, 다음과 같이 내가 where 절을 추가하는 경우, 그것은 준다 "에서 알 수없는 열 '은 diff' 'where 절'" 오류

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
     UNIX_TIMESTAMP('2013-11-14 14:35:21')) as diff from Alert 
where diff < 2 
order by diff 
limit 3 

확인을 나는 다음과 같이 HAVING 절을 사용하여 문을 변경 : 그것은 아직도 날을주고있다

SELECT *, ABS(UNIX_TIMESTAMP(time) - 
     UNIX_TIMESTAMP('2013-11-14 14:35:21')) as diff from Alert 
order by diff 
having diff<2 

SQL 구문에 오류가 있습니다. 올바른 구문이 줄에서 'DIFF < 2를 가진'근처에서 사용하는 MySQL 서버 버전으로 4

답변

0

사용에 해당하는 설명서를 확인

SELECT *, ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21')) as diff 
from Alert 
order by 
    ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21')) 
limit 3 

당신은에서 명명 된 열 계산을 사용할 수 없습니다 order by (또는 where) 절.

1

where 절에서 별칭 이름을 사용할 수는 없지만 쿼리에서 전체 결과를 가져온 후에 order by가 발생하므로 순서에 따라 작동합니다. 내가 올바른 구문이 먼저 좀 더 자세한 내용

WHERE is used while listing and no ALIAS names are available yet 

HAVING filters rows after listing all possible rows so ALIAS names are generated 

SELECT *, ABS(UNIX_TIMESTAMP(time) - UNIX_TIMESTAMP('2013-11-14 14:35:21')) as diff 
from Alert having diff<2 order by diff 

에 의해 다음 순서 데 생각하기 때문에

세 번째 쿼리는 오류를주고있다