2016-07-12 16 views
0

に一致します。表示LIKE条件は、私は同様のクエリ持つ列

SELECT fname, lname 
FROM names 
WHERE gcode LIKE %5536% OR fname LIKE %3663% 

は、このような50個の条件があり、そして用語は少し長いですが、それは一般的な考え方です。一時的なテーブルを作成することはできませんので、これが今後のルートです。

私はプログラム的にそれを強調表示することができますが、実行する方法がある

(すなわち、%5536%が独自の列で返すことがあります)の出力が独自の列での一致したことなどの条件を返すようにしようとしますこれはSQL?

答えて

5

は、あなたは、コレクション内の一致条件を保存することができます。

SELECT n.fname, 
     n.lname, 
     t.COLUMN_VALUE AS match 
FROM name n 
     INNER JOIN 
     TABLE(SYS.ODCIVARCHAR2LIST('%5536%', '%3663%')) t 
     ON (n.gcode LIKE t.COLUMN_VALUE); 
+0

私があれば、これは各 'fname' /' lname'組み合わせのために複数の行が返されることを指摘したいです複数の一致があります。 –

+1

@GordonLinoff原則は、コレクションを使用してすべての一致条件を保存し、それをデータテーブルと比較できることを示しました。マッチ条件を一つのカラムに集約する方法はいくつかあります。それは問題ではないはずです.LISTAGG()はすぐにわかります。 [バインド変数としてコレクションを渡すことさえできます](http://stackoverflow.com/a/34699771/1509264)、クエリ内の一致条件を静的に定義する必要はありません。 – MT0

1

これはSQLで行うことができます。ここでは一つの方法である:

select n.* 
from (select n.*, 
      ((case when gcode LIKE %5536% then '5536;' end) || 
       (case when gcode LIKE %3663% then '3663;' end) || 
       . . . 
      ) as matches 
     from names 
    ) n 
where matches is not null; 
関連する問題