2016-08-02 4 views
0

いくつかの機能を使用するdba_sourceからいくつかのオブジェクトを選択する場合。私は複数の名前のために同じことをしたい場合は 私はIN句とサブクエリを持つクエリで複数のLIKE文を使用するにはどうすればよいですか?

Select * from dba_source where text like '%some_name%'; 

のようにそれを書くことができます。どうすればいいのですか?

私はLIKEとORの使用法を認識していますが、名前はもう一度別のテーブルから取得しています。

SELECT * FROM DBA_SOURCE WHERE TEXT LIKE IN(SELECT PROCESS_NAME FROM PROCESSES); 

しかし、私はまた、両端に%のようなワイルドカード文字を追加したい:だから、のような何かをする方法はあります。

可能ですか?他の方法で提案することはできますか?

また、私はそれが動作しませんでした

WITH pnames AS (SELECT PROCESS_NAME FROM PROCESSES) 
SELECT * FROM DBA_SOURCE dbas WHERE INSTR(dbas.text,pnames.process_name,1,1)>0; 

を試してみました。

%|| %は良い考えです。しかし、それには時間がかかります。この

+0

クエリを2つ(ネストされた)に分割することができます。内側のクエリは、可能な単語のリストを 'select 'として取得します。単語|| '%'から.... '。これは、 'IN'内で使用できるワイルドカードによる値のコレクションを返します。 – FDavidov

+0

@Giladには3つのオプションがあります。 – Ben

+0

@Ben「LIKEを使用したOracleクエリー」は、その質問をするうまい方法ではありません。それは...ですか?その質問があまり説明できないときに、人々はどのようにそれを特定するのだろうか。 –

答えて

0
SELECT * 
FROM DBA_SOURCE d 
    JOIN PROCESSES p ON d.TEXT like '%' || p.PROCESS_NAME || '%' 

||で条件を聞かせを使用して対処するが任意のより良い方法は、ANSI SQLの連結です。私は、少なくとも新しいOracleのバージョンがそれをサポートしていると仮定します。それ以外の場合は、代わりにCONCAT()関数を試す必要があります。

+0

それは働いた。しかし、それには時間がかかります。他のより良い方法? –

+0

おそらくあなたは '... like p.PROCESS_NAME ||代わりに '%'を使用します。最適化することができます! – jarlh

0

テーブル間の結合とlike

SELECT D.* 
FROM DBA_SOURCE D 
JOIN PROCESSES P 
ON D.TEXT LIKE PROCESS_NAME || '%' 
+0

それは働いた。しかし、それには時間がかかります。他のより良い方法? –

+0

は実行に時間がかかります。これらの検索操作は安価ではありません。重複した質問の中の他のオプションの1つを試してみることができます。完全な検索を見てみましょう - この記事ではナンセンスを取っているかもしれません - SO –

+0

@ArjunRaja - あなたの特定の質問に答えた場合は、解決されたように:) –

関連する問題