我们可以使用SELECT作为REGEXP_LIKE的参数吗?

时间:2019-06-12 07:39:08

标签: sql regex oracle subquery regexp-like

我有两个表-Table1和Table2。

表1-包含正则表达式模式。

表2-包含文件名。

目的是从Table2中获取文件名与给定正则表达式模式匹配的行。

这很好:

SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, 'PATTERN', 'i');

但是,需要从表1中获取PATTERN

所以,我尝试过:

SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, SELECT PATTERN FROM TABLE1, 'i');

似乎不支持此构造,或者我在这里缺少明显的内容。

任何建议/指针将对您有很大帮助!

2 个答案:

答案 0 :(得分:1)

加入如何?

SQL> with
  2  table1 (pattern) as
  3    (select 'a' from dual union all
  4     select 'b' from dual
  5    ),
  6  table2 (file_name, column2) as
  7    (select 'Littlefoot', 'Not OK' from dual union all
  8     select 'Croatia'   , 'OK'     from dual
  9    )
 10  select b.file_name, b.column2
 11  from table2 b join table1 a on 1 = 1
 12  where regexp_like(b.file_name, a.pattern, 'i');

FILE_NAME  COLUMN
---------- ------
Croatia    OK

SQL>

答案 1 :(得分:1)

您需要将嵌套查询包装在圆括号中

SELECT COLUMN2
FROM   TABLE2
WHERE  REGEXP_LIKE ( FILE_NAME, ( SELECT PATTERN FROM TABLE1 ), 'i' );

仅当嵌套查询返回您可能需要使用的单行时,此方法才有效:

SELECT COLUMN2
FROM   TABLE2
WHERE  REGEXP_LIKE (
         FILE_NAME,
         ( SELECT PATTERN FROM TABLE1 WHERE unique_field = 'some value' ),
         'i'
       );

如果查询将返回多行,那么您可能需要使用联接:

SELECT t1.PATTERN,
       t2.COLUMN2
FROM   TABLE1 t1
       INNER JOIN TABLE2 t2
       ON ( REGEXP_LIKE ( t2.FILE_NAME, t1.PATTERN, 'i' ) );