2

データベース(Oracle)の単一の列に対して複数のフィルター(値)がある検索クエリを実装する必要があります。ただし、これらの複数のフィルター (値) はLIKEクエリ パラメーターです。アプローチを念頭に置いて正しい結果を視覚化しているかどうかはわかりません。

次のように機能するものが必要です。

departmentname IN ( LIKE '%Medi%', LIKE '%Ciga%')

うまくいかないことはわかっていますが、自分が持っているビジョンを示したいだけです。

次のようなクエリを使用foreachして手動で追加するのは簡単であることは誰もが知っていますが、'OR'

WHERE DEPARTMENTNAME LIKE '%Medi%' OR '%Ciga%' OR '%Tobacc%'

しかし、IN() AND LIKE を同時に使用して実装する方法はありますか?

他の提案も歓迎します。

4

1 に答える 1

2

すでにコメントしたように、いくつかの条件を連結する方が簡単で良いです:

where departmentName like '%Medi%'
   or departmentName like '%Ciga%'
   or departmentName like '%Tabacc%';

もう 1 つの方法は、値 '%Medi%'、'%Ciga%'、'%Tabacc%' を conditionTable に挿入してから、次のクエリを実行することです。

select department.*
  from department
 cross join conditionTable
 where department.departmentName like conditionTable.value;

departmentここでは、テーブルがあり、 conditionTable に column があると想定していますvalue。このソリューションを実装する場合は、同時実行性に注意し、条件テーブルを次のようにフィルタリングする必要があります

select department.*
  from department
 inner join conditionTable on conditionTable.session = yourSessionId
 where department.departmentName like conditionTable.value;

最後に、conditionTable を使用したくない場合に便利な 3 つ目の解決策は、文字列を生成し、次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;
于 2012-05-16T17:38:57.310 に答える