2017-06-16 9 views
-1

"OR"演算子を持つSQLクエリを作成しようとしています。それは、私がそれをいくつかのものと一緒に働かせて、「優先事項」と言うことです。論理演算子を使用してSQLでの順序付け

  • 説明
  • タイトル

とSQLクエリがある:

select * from item 
where description like '%a%' or title like '%a%'; 
私は、エンティティ 項目、それは私が検索で使用する2つのフィールドがありますがあります

ここで私が望むのは、2つのエンティティそれらのうちの1つは、 '%a%'のように説明で一致し、もう1つはタイトルで一致します。タイトルで一致するものは、リストの最初のものでなければなりません。言い換えれば、それはより大きな優先順位を持つべきです。 SQLでこのような目的を記述する方法はありますか?

方言:オラクルはオラクル/ H2

答えて

4

、あなたは彼らがあなたの条件に一致する方法で注文した行を作る値で注文する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 criteriasを使用します。 式 orderByExp = criteriaBuilder.selectCase() .when(述語、1)。その他(2); query.orderBy(criteriaBuilder.asc(orderByExp)); – dvelopp