使用逻辑运算符在 SQL 中排序

Ordering in SQL while using logical operators

我正在尝试编写具有 "OR" 运算符的 SQL 查询。问题是我希望它与某些人一起工作,比如 "priorities"。我有一个实体 Item,它有两个我在搜索中使用的字段:

并且有一个 SQL 查询:

select * from item
where description like '%a%' or title like '%a%';

我在这里想要的是,如果我们返回了两个实体,其中一个按描述匹配“%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__