2011-12-28 2 views
1

Я написал запрос, чтобы получить некоторые перекрывающиеся цифры из таблицы my_codes. Запрос ...Как настроить следующий запрос Oracle10g?

select distinct t1.destination, 
         t1.digitsmin, 
         t1.digitsmax, 
         t2.destination, 
         t2.digitsmin, 
         t2.digitsmax, 
         'S' 
     from my_codes t1 
     join my_codes t2 
      on t1.rownumber <> t2.rownumber 
     and t1.typ = t2.typ 
     WHERE t1.mycarr= 73 
     and t1.typ = 'S' 
     AND (t2.DigitsMin <= t1.DigitsMin AND t2.DigitsMax > t1.DigitsMin and 
      t2.DigitsMax < t1.DigitsMax OR 
      (t2.digitsmin > t1.digitsmin and t2.digitsmax <= t1.digitsmin) OR 
      (t2.digitsmin >= t1.digitsmin and t2.digitsmax < t1.digitsmax) OR 
      (t2.digitsmin > t1.digitsmin and t2.digitsmax <= t1.digitsmax) OR 
      (t2.digitsmin > t1.digitsmin and t2.digitsmin <= t1.digitsmax and 
      t2.digitsmax > t1.digitsmax)); 

my_codes Таблица данных

mycarr typ rownumber destination digitsmin digitsmax 
73  S 1   AAA  8875  8880 
73  S 2   AAA1  8870  8880 
73  S 3   AAA2  8875  8878 
73  S 4   AAA3  8876  8880 

Если таблица содержит больше данных его принятия много времени. Может ли кто-нибудь помочь мне решить эту проблему.

ответ

2

Попробуйте упростить его просто так:

select distinct t1.destination, 
         t1.digitsmin, 
         t1.digitsmax, 
         t2.destination, 
         t2.digitsmin, 
         t2.digitsmax, 
         'S' 
     from my_codes t1 
     join my_codes t2 
      on t1.rownumber <> t2.rownumber 
     and t1.typ = t2.typ 
     WHERE t1.mycarr= 73 
     and t1.typ = 'S' 
     and t1.digitsmax >= t2.digitsmin 
     and t1.digitsmin <= t2.digitsmax; 

На основе ваших четырех выборок строк, возвращается 12 строк вместо 7, что ваши оригинальные возвращает запрос. Но, насколько я понимаю, это правильно, поскольку каждая из этих строк перекрывает остальные.

+0

thx для вашего ответа ... –

Смежные вопросы