2

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

我想要一些应该像这样工作的东西:

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

我知道这行不通,只是我想展示我的愿景。

尽管我们都知道在查询之间使用foreach和手动添加它很简单,例如:'OR'

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

但是有什么方法可以同时使用 IN() AND LIKE 来实现它?

也欢迎其他建议。

4

1 回答 1

2

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

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

另一种方法是将这些值 '%Medi%'、'%Ciga%' 和 '%Tabacc%' 插入到条件表中,然后运行以下查询:

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

我在这里假设您的 table 是department并且 conditionTable 有一个 column value。如果您实施此解决方案,您应该关心并发性,并通过类似的方式过滤条件表

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

最后,如果您不想使用条件表,第三种可能很方便的解决方案是生成一个字符串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;
于 2012-05-16T17:38:57.310 回答