Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我们可以使用SELECT作为REGEXP_LIKE的参数吗?_Sql_Regex_Oracle_Subquery_Regexp Like - Fatal编程技术网

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

Sql 我们可以使用SELECT作为REGEXP_LIKE的参数吗?,sql,regex,oracle,subquery,regexp-like,Sql,Regex,Oracle,Subquery,Regexp Like,我有两张桌子——表1和表2 表1-包含正则表达式模式 表2-包含文件名 目的是从表2中获取文件名与给定正则表达式模式匹配的行 这很好: SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, 'PATTERN', 'i'); 但是,该模式需要从表1中提取 所以,我试着: SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, SELECT PATTERN FROM TABLE1,

我有两张桌子——表1和表2

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

表2-包含文件名

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

这很好:

SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, 'PATTERN', 'i');
但是,该模式需要从表1中提取

所以,我试着:

SELECT COLUMN2 FROM TABLE2 WHERE REGEXP_LIKE (FILE_NAME, SELECT PATTERN FROM TABLE1, 'i');
看起来要么这个构造不受支持,要么我在这里遗漏了一些明显的东西

任何建议/建议都会帮上大忙

加入怎么样

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>
加入怎么样

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>

您需要将嵌套查询用圆括号括起来:

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

您需要将嵌套查询用圆括号括起来:

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

请尝试使用类似REGEXP的文件名,从表1“i”中选择模式,但请确保表1只有一行。@WernfriedDomscheit这很有帮助。我想知道我怎么会错过尝试这种构造。感谢您快速准确的响应。请尝试使用类似REGEXP的文件名,从表1中选择“i”-中的模式,但请确保表1中只有一行。@WernfriedDomscheit这很有帮助。我想知道我怎么会错过尝试这种构造。感谢您快速准确的回复。