我需要实现一个搜索查询,我们有在数据库中的单个列(Oracle)的多个过滤器(值)。 但是,这些多重过滤(值) LIKE
查询参数。 我不知道,我用心中的做法是否正在远景规划正确的结果。
我想要的东西,应该像:
departmentname IN ( LIKE '%Medi%', LIKE '%Ciga%')
我知道这是行不通的,只是我想表明我有视力。
虽然我们都知道它的简单使用foreach
和手动添加'OR'
之类的查询之间:
WHERE DEPARTMENTNAME LIKE '%Medi%' OR '%Ciga%' OR '%Tobacc%'
但是,有没有什么办法来实现它使用IN()和LIKE同时?
其他建议也欢迎。
正如已经评论说,这是更好,更简单,只是连接几个条件:
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;