我试图减少我的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语句也很长且很复杂< / p>
所以我试图将where语句重写为以下内容:
SELECT
col1, col2, col3...etc
FROM
someTabe
WHERE
CASE WHEN :sType = 1 then col1= :param ELSE col1 like '%'||:param||'%' END
但是这无法运行,它需要在this question
之后的case语句之后运算符那么,是否有一种语法可以实现上述陈述中的想法?
答案 0 :(得分: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