, 당신은 자신을 반복하지 않도록하려면 :
SELECT CASE
WHEN column1=1 THEN 'ONE'
WHEN column1=2 THEN 'TWO'
WHEN column1=2 THEN 'THREE'
ELSE 'Unknown'
END AS test
FROM table1
WHERE CASE
WHEN column1=1 THEN 'ONE'
WHEN column1=2 THEN 'TWO'
WHEN column1=2 THEN 'THREE'
ELSE 'Unknown'
END = 'ONE';
을 ...하지만 확실한 방법 트리거
당신은 그것을 본질적으로 동일하다이 방법을 수행 할 수 있습니다 오류 :
SELECT CASE
WHEN column1=1 THEN 'ONE'
WHEN column1=2 THEN 'TWO'
WHEN column1=2 THEN 'THREE'
ELSE 'Unknown'
END AS test
FROM table1
WHERE test = 'ONE';
ERROR 1054 (42S22): Unknown column 'test' in 'where clause'
... 그래서 다른 프로그래밍 언어 에서처럼 변수를 사용할 수 있다는 것을 알았습니다.
SQL은 프로그래밍 언어가 아닙니다 (쿼리 언어 임). 변수는 이런 식으로 동작하지 않습니다. 일반적으로, 변수를 사용하여 코드 조각을 대체 할 수는 없습니다. 그리고 (당신의 예에서와 같이) 값을 저장하기 위해 그들을 사용하여 the manual warns로, 매우 위험하다 :이 상황에서
other than in SET
statements you should never assign a value to a user variable and read the value within the same statement. [...] For other statements, such as SELECT
, you might get the results you expect, but this is not guaranteed.
, 전체 표현식은 아마 갈 수있는 유일한 합리적인 방법입니다 반복. 실제 코드가 거대하고 유지 관리가 어려우면 클라이언트 언어 (PHP, Java, 기타 ...)로 동적으로 SQL을 생성 할 수 있습니다. MySQL 자체에는 dynamic SQL features이 있지만 편리하지는 않습니다.
특정 상황에서, 당신은 또한 하위 쿼리와 함께 놀 수 있지만, 성능이
때로는 고통을 수 있음을 경고 :
SELECT *
FROM (
SELECT CASE
WHEN column1=1 THEN 'ONE'
WHEN column1=2 THEN 'TWO'
WHEN column1=2 THEN 'THREE'
ELSE 'Unknown'
END AS test
FROM table1
) t
WHERE test = 'ONE';
을 그리고 우리는 당신이 실현하려 원하는 것을 잘 모릅니다. 우리에게 db 스키마, 샘플 데이터, 현재 및 예상 출력을 보여주십시오. \t [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t 그리고 [** 시작 **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) 질문 품질을 향상시키고 더 나은 답변을 얻는 방법을 배우십시오. \t [** 최소, 완전하고 검증 가능한 예제를 만드는 방법 **] (http://stackoverflow.com/help/mcve) –
현재 쿼리에 어떤 문제가 있습니까? 어떤 오류, 잘못된 결과? –