首页 > 解决方案 > 我们可以使用 SELECT 作为 REGEXP_LIKE 的参数吗?

问题描述

我有两张桌子——Table1 和 Table2。

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

表 2 - 包含文件名。

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

这工作正常:

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

但是,PATTERN 需要从 Table1 中获取

所以,我尝试过:

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

似乎不支持此构造,或者我在这里遗漏了一些明显的东西。

任何建议/指针都会有很大帮助!

标签: sqlregexoraclesubqueryregexp-like

解决方案


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

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' ) );

推荐阅读