2016-09-28 8 views
0

내가 중복 조항을 제거하기 위해 내 SQL where 문의 크기를 줄이기 위해 노력하고있어 "를 union 문을 제거 곳조건부 문 비교 연산자는

내 문은 다음과 같습니다.

SELECT 
    col1, col2, col3...etc 
FROM 
    someTabe 
WHERE 
    col1 = :param 
    and :sType = 1 
UNION 
SELECT 
    col1, col2, col3...etc 
FROM 
    someTabe 
WHERE 
    col1 like '%'||:param||'%' 
    and :sType = 2 

이 문과 관련된 문제는 각 :sType 가능성에 대해 select 문과 모든 조합을 작성해야하며 내 경우 SQL 문은 유니온이 없어도 매우 길고 복잡합니다.

012 그것은 그래서 this question

에서, 같은 경우 문 뒤에 연산자를 필요

SELECT 
    col1, col2, col3...etc 
FROM 
    someTabe 
WHERE 
    CASE WHEN :sType = 1 then col1= :param ELSE col1 like '%'||:param||'%' END 

하지만이 실행되지 : 3,516,

그래서 나는 이런 식으로 뭔가에 어디 문을 다시 쓰기 위해 노력했다 위의 성명에서 아이디어를 얻을 수있는 구문이 있습니까?

+0

은 그냥 사용 또는 수 없습니다 : (COL1 = : PARAM과 : STYPE = 1) 또는 (COL1 LIKE '% PARAM % 전을 위해 '및 sType = 2) ... ?? – Zeina

+1

@Zeina, 나는 솔직히 왜 내가 OR 문을 생각하지 않았는지 모르겠다. 나는 보통 OR을 피하는 경향이있다. 그리고 나는 해결책을 너무 많이 생각했다. 나는 투표를 할 자격이 있다고 생각한다. – simsim

답변

2

간단하거나 충분할 수도 있습니다. 경우 사용하는 방법

SELECT 
    col1, col2, col3...etc 
FROM 
    someTabe 
WHERE 
    (:sType = 1 and col1 = :param) 
or (:sType = 2 and col1 like '%'||:param||'%') 

예 : Conditional WHERE clause with CASE statement in Oracle

+0

나는 왜 그런지 모른다. 나는 그것을 생각하지 않았다! – simsim