2016-09-28 76 views
0

我想減少我的SQL where語句的大小,以消除多餘的條款「刪除union聲明條件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語句並結合所有可能性,在我的情況下,即使沒有工會,我的sql語句也很長並且很複雜

所以我試圖在where語句重新寫這樣的事:

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

但這無法運行,它的case語句後,需要一個操作符如this question

那麼,有一種語法可以實現上述說法中的想法?

+0

你就不能使用OR:爲前:WHERE(COL1 =:PARAM和:S型= 1)或(COL1 LIKE「%PARAM% '和sType = 2)... ?? – Zeina

+1

@Zeina,我真的不知道爲什麼我沒有想到OR語句,我通常傾向於避免OR,並且我過度的解決了這個問題,我認爲我值得投票xD – simsim

回答