使用逻辑运算符在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__ 
+0

谢谢!这对我来说是完美的! 我使用jpa2标准。 表达式 orderByExp = criteriaBuilder.selectCase() .when(predicate,1).otherwise(2); query.orderBy(criteriaBuilder.asc(orderByExp)); – dvelopp