2012-02-05 1 views
1

나는 다음과 같은 쿼리가 (How to produce a result set based on the comparison of values between two fields? 참조)동일한 쿼리에서 AS 키워드를 사용하여 형성된 필드에서 WHERE를 수행 할 수 있습니까? 예를 들어

select id, 
     case nickname when '' then full_name else nickname end as new_name 
from your_table 

을 내가

select id, 
     case nickname when '' then full_name else nickname end as new_name 
from your_table 
where new_name = 'Jen' 

는 내가 설정 한 결과를 필터링 할 수 있습니다 마지막 줄을 추가 할 때 나는 구문 오류를 받고 있어요 WHERE 성명? 내가 MySQL을 사용하지만 하위 쿼리를 사용할 수,

select id, 
     case nickname when '' then full_name else nickname end as new_name 
from your_table 
where case nickname when '' then full_name else nickname end = 'Jen' 

을 시도하거나 한 이후

+0

내가 당신의 첫 번째 문을 포장 할 필요가 생각 즉, '*에서 선택'- 하위 쿼리를 사용 –

+0

네 불행하게도 나는 오류 메시지 '오류 코드 수 : 1054 알 수없는 열'NEW_NAME '에서을 'where clause'' – user784637

+0

죄송합니다 구문 오류를 알지 못했습니다. 곧, 내 connent 변경되었습니다. 내 잘못이야. –

답변

4

를 사용을 당신은을 사용해야합니다 하위 쿼리 :

select t.id, t.new_name from 
(select id, 
    case nickname when '' then full_name else nickname end as new_name 
from your_table) t 
where t.new_name = 'Jen' 
2

그것은 동안이었다. 이 반응을 게시 한 후 나에게 일어 났으며 켄 화이트가 나를 때렸다! 마일리지가 다를 수 있지만 로컬 데이터베이스를 확인하고 실행 계획은 두 가지 접근 방식 모두 동일합니다.

2

당신은 당신이 첫 번째 문 "에서 *를 선택합니다 (...)"

즉 WAP 경우 NEW_NAME의 필드 이름을 사용할 수 있어야합니다 - 하위 쿼리

관련 문제