2016-09-28 21 views
0

私は「冗長な条項をなくすunion文を削除するには、私のSQL where文のサイズを小さくしようとしている条件文と比較演算子

は私の文はこのようなものです:。

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文とunionをすべて記述しなければならず、私の場合はSQL文が非常に長く複雑で、組合がなくても複雑です

012それはとても this question

に、あるようcase文の後にオペレータを必要とし、

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

しかし、これは実行に失敗します。

は、だから私はこのような何かにどこ文を再書き込みしようとしています上記の声明でそのアイデアを達成できる構文がありますか?

+0

は、あなただけの使用ORすることはできません:(COL1 =::PARAMと:STYPE = 1)OR(COL1 LIKE「%のparam%EXのために'とsType = 2)...? – Zeina

+1

@Zeina、私は正直なところ、なぜ私はORの声明を考えなかったのかわからない、私は通常ORを避ける傾向があり、私は解決策を思い知らされていた、私は下の投票に値すると思うxD – 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