2016-08-02 71 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; 

它没有工作。

加入%|| %是个好主意。但是,它需要更多时间来运行。有没有更好的办法由like

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

您可以将查询拆分为两个(嵌套的),其中内部查询将可能单词列表作为'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 || '%' 

||应对这种

+0

它的工作。但是需要更多时间来运行。任何其他更好的方法? –

+0

也许你可以做'...像p.PROCESS_NAME || “%”'来代替。可以优化! – jarlh

0

使用表之间的联接,让条件ANSI SQL级联。我认为至少有更新的Oracle版本支持它。否则,您可能需要尝试使用CONCAT()函数。

+0

它的工作。但是需要更多时间来运行。任何其他更好的方法? –

+0

的确有意义,它将需要更多时间来运行。这些搜索操作并不便宜。你可以尝试在重复问题中的其他选项之一,看看全搜索 - 可能是这个废话 - 只是从我看到的东西SO –

+0

@ArjunRaja - 如果这些答案中的任何回答你的具体问题,请考虑标记问题作为解决:) –

相关问题