甲骨文:合并两个不同的查询为一体,就像&IN(Oracle: merging two differe

2019-06-25 08:09发布

我需要实现一个搜索查询,我们有在数据库中的单个列(Oracle)的多个过滤器(值)。 但是,这些多重过滤(值) LIKE查询参数。 我不知道,我用心中的做法是否正在远景规划正确的结果。

我想要的东西,应该像:

departmentname IN ( LIKE '%Medi%', LIKE '%Ciga%')

我知道这是行不通的,只是我想表明我有视力。

虽然我们都知道它的简单使用foreach和手动添加'OR'之类的查询之间:

WHERE DEPARTMENTNAME LIKE '%Medi%' OR '%Ciga%' OR '%Tobacc%'

但是,有没有什么办法来实现它使用IN()和LIKE同时?

其他建议也欢迎。

Answer 1:

正如已经评论说,这是更好,更简单,只是连接几个条件:

where departmentName like '%Medi%'
   or departmentName like '%Ciga%'
   or departmentName like '%Tabacc%';

另一种方法是插入这些值“%的Medi%”,“%适佳%”和“%Tabacc%”成conditionTable,然后再运行此查询:

select department.*
  from department
 cross join conditionTable
 where department.departmentName like conditionTable.value;

我在这里假设你的表是department ,而且conditionTable有一个列value 。 如果实施该解决方案,你应该关心的并发性,并通过类似过滤conditionTable

select department.*
  from department
 inner join conditionTable on conditionTable.session = yourSessionId
 where department.departmentName like conditionTable.value;

最后,第三个解决方案,可能是方便,如果你不想使用conditionTable,是生成字符串select <cond1> as value from dual union select <cond2> from dual...并放入一个动态查询作为

select department.*
  from department
 cross join
   (select '%Medi%' as value from dual
     union
    select '%Ciga%' from dual
     union
    select '%Tabacc%' from dual) conditionTable
 where department.departmentName like conditionTable.value;


文章来源: Oracle: merging two different queries into one, LIKE & IN