Oracle:将两个不同的查询合并为一个,LIKE&在

时间:2012-05-16 16:49:50

标签: sql oracle sql-like

我需要实现一个搜索查询,其中我们为数据库中的单个列(oracle)提供了多个过滤器(值)。但是这些多个过滤器(值)是LIKE个查询参数。我不确定我是否正在考虑采用这种方法的正确结果。

我想要的东西应该像:

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

我知道它不起作用,只是我希望展示我的愿景。

虽然我们都知道使用foreach并在查询之间手动添加'OR'很简单:

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

但有没有办法同时使用IN()AND LIKE实现它?

其他建议也受到欢迎。

1 个答案:

答案 0 :(得分:2)

正如已经评论过的那样,连接几个条件会更好更简单:

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

另一种方法是将这些值'%Medi%','%Ciga%'和'%Tabacc%'插入到conditionTable中,然后运行此查询:

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

我假设您的表格为department,而条件表格列为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;