我们可以使用 SELECT 作为 REGEXP_LIKE 的参数吗?
Can we use SELECT as an argument to REGEXP_LIKE?
我有两个表 - 表 1 和表 2。
表 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');
似乎不支持此构造,或者我在这里遗漏了一些明显的东西。
任何 advice/pointers 都会有很大的帮助!
加入怎么样?
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' );
这仅在嵌套查询 return 是您可能需要使用的单行时有效:
SELECT COLUMN2
FROM TABLE2
WHERE REGEXP_LIKE (
FILE_NAME,
( SELECT PATTERN FROM TABLE1 WHERE unique_field = 'some value' ),
'i'
);
如果查询将 return 多行,那么您可能需要使用联接:
SELECT t1.PATTERN,
t2.COLUMN2
FROM TABLE1 t1
INNER JOIN TABLE2 t2
ON ( REGEXP_LIKE ( t2.FILE_NAME, t1.PATTERN, 'i' ) );
我有两个表 - 表 1 和表 2。
表 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');
似乎不支持此构造,或者我在这里遗漏了一些明显的东西。
任何 advice/pointers 都会有很大的帮助!
加入怎么样?
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' );
这仅在嵌套查询 return 是您可能需要使用的单行时有效:
SELECT COLUMN2
FROM TABLE2
WHERE REGEXP_LIKE (
FILE_NAME,
( SELECT PATTERN FROM TABLE1 WHERE unique_field = 'some value' ),
'i'
);
如果查询将 return 多行,那么您可能需要使用联接:
SELECT t1.PATTERN,
t2.COLUMN2
FROM TABLE1 t1
INNER JOIN TABLE2 t2
ON ( REGEXP_LIKE ( t2.FILE_NAME, t1.PATTERN, 'i' ) );