2016-10-02 7 views
0
내가 재스퍼 소견서 일하고

을 일하지 않는이 테이블 내가 2 개 매개 변수 internal, external가 .When I 내부 그때 내 쿼리는 사용자를 보여 필요가있는 username LIKE '%[email protected]__%.__%' 내가 외부 사용할 때 사용이 user라는 이름의 한 다음 내 쿼리 2,3,4,5에게 더 행을 표시하지 않습니다 username NOT LIKE '%[email protected]__%.__%' .Like이 internal 다음보고하는 사용자를 보여줄 필요가 있고 external 다음이 표시됩니다보고 할 때 하나의 row..My 쿼리가Case 문은 쿼리

SELECT case 
when $P{internal} = 'internal' then 

id end as cid, 
designation,division_name,pin_no,username FROM application_user where username  LIKE 
'%[email protected]__%.__%' 

else 
id end as cid, 
designation,division_name,pin_no,username FROM application_user where username NOT LIKE 
    '%[email protected]__%.__%' 

하지만, 작동하지 않습니다. enter image description here

알려주세요. 명확하지 않은 경우

+0

게시 한 SQL이 유효하지 않습니다. 부모가없는 'ELSE'또는 'IF'가 있습니다. 1 번째 줄의 'CASE WHEN' 문은 4 번째 줄의'END '에 의해 종료됩니다. – Dai

+0

어떻게 작성해야합니까? – USERRR5

+0

데이터를 이미지가 아닌 텍스트로 게시하십시오. –

답변

1

투영 문을 SQL에서 직접 매개 변수화 할 수는 없습니다 (하지만 동적 SQL에서는 분명히 할 수 있습니다).

테스트 표현식은 이 아닌 WHERE 블록에서 평가되어야합니다. 게시 한 SQL이 유효하지 않아 실행되지 않으므로 내가보고있는 결과를 얻는 방법이 궁금합니다.

이 시도 :이 필요하기 때문에 매개 변수 값에 따라 다른 효과가 쿼리 "모양"의 최고의 런타임 실행 계획을 초래하지 않을 것이라는

SELECT 
    id AS cid, 
    designation, 
    division_name, 
    pin_no, 
    username 
FROM 
    application_user 
WHERE 
    ($P{internal} = 'internal' AND username  LIKE '%[email protected]__%.__%') 
    OR 
    ($P{internal} <> 'internal' AND username NOT LIKE '%[email protected]__%.__%') 

참고. 이상적으로는 응용 프로그램 코드에서 두 개의 서로 다른 u 리를 선택해야하며, 서로 다른 username 술어가 있어야합니다.

+0

실제로'like '는 모든 와일드 카드를 가지고 있기 때문에이 쿼리가 전체 테이블 스캔을하지 못하게하는 것이 어렵습니다. 따라서 성능은 큰 문제가 아닙니다. –