我需要实现一个搜索查询,其中我们为数据库中的单个列(oracle)提供了多个过滤器(值)。但是这些多个过滤器(值)是LIKE
个查询参数。我不确定我是否正在考虑采用这种方法的正确结果。
我想要的东西应该像:
departmentname IN ( LIKE '%Medi%', LIKE '%Ciga%')
我知道它不起作用,只是我希望展示我的愿景。
虽然我们都知道使用foreach
并在查询之间手动添加'OR'
很简单:
WHERE DEPARTMENTNAME LIKE '%Medi%' OR '%Ciga%' OR '%Tobacc%'
但有没有办法同时使用IN()AND LIKE实现它?
其他建议也受到欢迎。
答案 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
。如果实现此解决方案,则应关注并发性,并通过类似
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;