使用逻辑运算符在SQL中排序
问题描述:
我试图编写一个SQL查询,它具有“OR”运算符。事情是,我希望它与一些工作,让说“优先事项”。我有一个实体项目,它有两个领域,我在搜索中使用:使用逻辑运算符在SQL中排序
- 描述
- 冠军
而且有一个SQL查询:
select * from item
where description like '%a%' or title like '%a%';
我在这里想要的是,如果我们有两个实体ret并且其中一个匹配类似'%a%'的描述和另一个 - 标题,通过标题匹配的应该是列表中的第一个。换句话说,它应该有更大的优先权。有没有一种方法可以在SQL中描述这样的目的?
方言:甲骨文/ H2
答
在Oracle中,你可以使用一个CASE
一个值,使得的方式排序行命令他们匹配您的条件:
/* test case */
with item(title, description) as (
select '__x__', '__x__' from dual union all
select '__x__', '__a__' from dual union all
select '__a__', '__x__' from dual union all
select '__a__', '__a__' from dual
)
/* the query */
select *
from item
where description like '%a%' or title like '%a%'
order by case
when title like '%a%'
then 1
else 2
end
这给出:
TITLE DESCR
----- -----
__a__ __x__
__a__ __a__
__x__ __a__
谢谢!这对我来说是完美的! 我使用jpa2标准。 表达式