首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的动态Where子句-需要解决特定场景

SQL中的动态Where子句-需要解决特定场景
EN

Stack Overflow用户
提问于 2018-01-31 21:34:19
回答 3查看 54关注 0票数 1

在使用CASE实现动态where子句时,我得到了一些复杂性。有没有其他方法来解决下面的问题?如果有人能给出任何解决方案,我将不胜感激。

问题:有两个SQL查询需要组合成一个。我尝试了不同的方法来实现它,但失败了。下面我已经提供了“组合查询”,如果条件是通用的(如果在两个查询中只使用了“LIKE”操作),那么它就可以工作,但这里是不同的。“Query-1”包含“LIKE”,因为“Query-2”具有“NOT LIKE”运算符。

查询-1:

代码语言:javascript
复制
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10
AND X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 LIKE '%DATA-1%'

查询-2:

代码语言:javascript
复制
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10
AND X.LOG_DATE < TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 NOT LIKE '%DATA-2%'

组合查询:

代码语言:javascript
复制
SELECT * FROM TABLE_NAME X
WHERE X.COL1 = 10 
AND X.COL2 LIKE
CASE
  WHEN (X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY'))
    THEN 
      '%DATA-1%'
  ELSE 
    '%DATA-2%'
END
EN

回答 3

Stack Overflow用户

发布于 2018-01-31 21:38:10

您可以在where子句中使用OR语句,如下所示:

代码语言:javascript
复制
SELECT * FROM TABLE_NAME X
WHERE (X.COL1 = 10
AND X.LOG_DATE >= TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 LIKE '%DATA-1%')
OR
(X.COL1 = 10
AND X.LOG_DATE < TO_DATE('07/01/2016', 'MM/DD/YYYY')
AND X.COL2 NOT LIKE '%DATA-2%')
票数 5
EN

Stack Overflow用户

发布于 2018-01-31 21:42:19

解决方案用例(但可能不是问题的最佳解决方案):

代码语言:javascript
复制
select *
  from table_name x
 where x.col1 = 10
   and (case
          when (x.log_date >= to_date('07/01/2016', 'MM/DD/YYYY'))
               and x.col2 like '%DATA-1%' then
           1 
          when (x.log_date < to_date('07/01/2016', 'MM/DD/YYYY'))
               and x.col2 not like '%DATA-2%' then
           1
          else
           0
       end) = 1
票数 1
EN

Stack Overflow用户

发布于 2018-01-31 21:50:58

可以对这两个查询使用UNION或UNION ALL

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48543450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档