Oracle проверяет столбец в строке перед совпадением - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать запрос, в котором я нахожу совпадение в подстроке двух разных столбцов.Я могу получить свои результаты с помощью таблицы «с», а затем запросить эти результаты, но это медленно.
Row2 - это то, что будет искать условие поиска.Для упрощения Row2 columnC = 1 Row2 columnB содержит значение, из которого извлекается подстрока, чтобы проверить, находится ли подстрока Row1 columnA = Row2 columnB подстроки.Любые советы или мысли приветствуются.

1 Ответ

0 голосов
/ 25 октября 2018

Возможно, вы можете использовать LAG () для этой цели (см. документация ).Пример:

Таблица и данные

create table t1 ( column_a, column_b  )
as
select 'string100', 'string200' from dual union
select 'string200', 'string100' from dual union
select 'string300', 'string100' from dual union
select 'string400', 'string500' from dual union
select 'string500', 'string400' from dual ; 

Найти "предыдущие" значения с помощью LAG ()

select
  column_a
, column_b
, lag ( column_a, 1, 0 ) over ( order by column_a ) preceding_a
from t1 ;

COLUMN_A   COLUMN_B   PRECEDING_A  
string100  string200  0            
string200  string100  string100    
string300  string100  string200    
string400  string500  string300    
string500  string400  string400 

Окончательный запрос и результаты

-- Check: is Row1 columnA subtring = Row2 columnB substring
select column_a, column_b,
  case
    when substr( preceding_a, 7, 1 ) = substr( column_b, 7, 1 ) then
      'substring Row1 columnA = substring Row2 columnB'
    else
      'substrings don''t match'
  end compare_substrings
from (
  select
    column_a
  , column_b
  , lag ( column_a, 1, 0 ) over ( order by column_a ) preceding_a
  from t1
) ;

COLUMN_A   COLUMN_B   COMPARE_SUBSTRINGS                               
string100  string200  substrings don't match                           
string200  string100  substring Row1 columnA = substring Row2 columnB  
string300  string100  substrings don't match                           
string400  string500  substrings don't match                           
string500  string400  substring Row1 columnA = substring Row2 columnB 

Вы, вероятно, можете сделать «окончательный запрос» более компактным (т.е. без написания встроенного представления). Dbfiddle здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...