Можем ли мы использовать SELECT в качестве аргумента для REGEXP_LIKE? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть две таблицы - Table1 и Table2.

Table1 - Содержит шаблон регулярного выражения.

Table2 - Содержит имена файлов.

Намерение выбрать строки изТаблица2, где имя файла совпадает с заданным шаблоном регулярных выражений.

Это прекрасно работает:

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

Кажется, либо эта конструкция не поддерживается, либо я здесь упускаю что-то очевидное.

Любые советы / указатели будут очень полезны!

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Вам необходимо заключить вложенный запрос в круглые скобки:

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' ) );
1 голос
/ 12 июня 2019

Как насчет объединения?

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...