2016-08-02 8 views
0

Wenn ich einige Objekte aus dba_source auswählen möchte, die eine Funktion verwendet. Ich kann es wieWie verwenden Sie mehrere LIKE-Anweisungen in einer Abfrage mit IN-Klausel und einer Unterabfrage?

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

schreiben Wenn ich die gleiche Sache für mehrere Namen machen wollen. Wie mache ich es?

Ich bin mir der Verwendung von LIKE und OR bewusst, aber die Namen sind wieder aus einer anderen Tabelle. So ist es eine Möglichkeit, etwas zu tun:

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

Aber ich möchte auch Wildcard-Zeichen wie % an den Enden hinzuzufügen.

Ist es möglich. oder kannst du einen anderen Weg vorschlagen?

Ich habe auch versucht

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

Es hat nicht funktioniert.

Beitritt mit% || % ist eine gute Idee. Aber es braucht mehr Zeit zu laufen. Gibt es eine bessere Art und Weise mit diesem

+0

Sie können die Abfrage in zwei (verschachtelte) aufteilen, wobei die innere Abfrage die Liste der möglichen Wörter als 'select '%' || erhält Wort || '%' von .... '. Dies wird eine Sammlung von Platzhalterwerten zurückgeben, die Sie innerhalb des "IN" verwenden können. – FDavidov

+0

Es gibt 3 andere Optionen in @Gilad, einschließlich in der oberen Antwort. – Ben

+0

@Ben "Oracle Abfrage mit LIKE" ist keine gute Möglichkeit, diese Frage zu stellen. ist es? Wie werden die Leute es identifizieren, wenn die Frage nicht sehr erklärend ist? –

Antwort

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

|| ist ANSI SQL-Verkettung. Ich gehe davon aus, dass zumindest neuere Oracle-Versionen dies unterstützen. Andernfalls müssen Sie möglicherweise CONCAT() Funktion versuchen.

+0

Es hat funktioniert. Aber es braucht mehr Zeit zu laufen. Irgendein anderer besserer Weg? –

+0

Vielleicht könntest du '... wie p.PROCESS_NAME || "%" stattdessen. Kann optimiert werden! – jarlh

0

umgehen Verwenden Sie eine zwischen den Tabellen verbinden und lassen Sie den Zustand der like

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

Es hat funktioniert. Aber es braucht mehr Zeit zu laufen. Irgendein anderer besserer Weg? –

+0

macht Sinn, dass es mehr Zeit braucht, um zu laufen. Diese Suchoperationen sind nicht billig. Sie können versuchen, eine der anderen Optionen in der duplizierten Frage auf vollständige Suche suchen - könnte Unsinn mit diesem einen nehmen - nur von Sachen, die ich auf SO gesehen –

+0

@ArjunRaja - Wenn eine dieser Antworten beantwortet Ihre spezifische Frage, bitte beachten Sie die Frage zu markieren wie gelöst :) –