Oracle在匹配之前检查行中的列

时间:2018-10-24 19:43:46

标签: sql oracle

我正在尝试创建一个查询,在其中我找到两个不同列的子字符串上的匹配项。我可以使用“ with”表获取结果,然后查询这些结果,但是速度很慢。
    第2行是搜索条件将要查找的内容。简化Row2     columnC = 1     第2列columnB保留要从中取出子字符串以检查的值     查看Row1 columnA subtring = Row2 columnB子字符串。 任何建议或想法表示赞赏。

1 个答案:

答案 0 :(得分:1)

也许您可以为此目的使用LAG()(请参阅documentation)。示例:

表格和数据

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 here