2013-02-03 2 views
1

나는 한 번 다른 행동을하기 위해 WHERE 절이 필요하고 해결 방법을 모른다는 상황에 직면 해있다. mysql, selective WHERE 절

SELECT ... 
FROM ... 
WHERE 

     (
     CASE @test 
     WHEN 0 
     THEN 
      pid = inPID 
     WHEN 1 
     THEN 
      id = inPID 
      @test := 0 <- syntax error 
     END 
    ) 

I는 몇 가지 변수를 정의 @Test (시저 매개 변수에 의해 초기화 된) 상기 절차 TEST = 1이라하면, I 번만 식 inPID 필요했습니다. 이것은 가능하다 ?

답변

1

@test = @test - 1 
    -- this just to be @test is 0 , if you have other value change it be 0 

EDIT처럼 그것을 시도 :

(
    CASE @test 
    WHEN 0 
    THEN 
     pid = inPID 
    WHEN 1 
    THEN 
     id = inPID 
    WHEN 1 
    THEN 
     @test := 0  
    END 

또는 사용하려고이

WHEN 1 
THEN 
    id = inPID AND @test := 0 
+0

아니, 문제는 내가 THEN과 END 사이에 한 줄을 쓸 수 있습니다이 테스트하지만, 더 선은 나에게 오류를 줄 것이다. 나는 BEGIN 끝으로 imbrication를 시도했지만 성공하지 못했습니다. 나는 dbForge 스튜디오를 사용 ... – user1973900

+0

편집 내 대답 –

+0

아니, 작동하지 않습니다, 실제로 평가되지 않습니다. 나는 수정 후 SELECT를 선택했다고 생각합니다 ... – user1973900

1

시도해 주시겠습니까? 전체 쿼리 문을 우리에게 보여줄 수 있다면 최선입니다. CASE THEN에서는 비록 SQL Server의 AND, OR를 사용할 수 anyway.:-

SELECT ... 
FROM ... 
WHERE 

     (
     CASE WHEN @test = 0 THEN pid = inPID 
      WHEN @test= 1 THEN id = inPID AND @test:=0 
     END 
    ) 
+0

@ user1973900이 하나 시도해 봤어? 의견과 기쁜 마음으로 들어보세요. – bonCodigo

+0

답장을 보내 주셔서 감사합니다. (둘 다) 그러나 WHEN @ test = 1 그 다음에 id = inPID와 @test : = 0이 항상 @ test = 0 (항상 처음 필요한 경우)이므로 작동하지 않습니다. – user1973900

+0

조금 더. 초기 값이 '1'로 평가되면 '@ test'를 '0'으로 재설정하겠다는 인상을 받았습니다. 설명해 주시면 도와 드리겠습니다. – bonCodigo