2016-09-28 70 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

回答