Как настроить следующий запрос Oracle10g? - PullRequest
1 голос
/ 28 декабря 2011

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

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

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

1 Ответ

2 голосов
/ 28 декабря 2011

Попытайтесь упростить это до следующего:

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, которые возвращает ваш исходный запрос.Но, насколько я понимаю, это правильно, поскольку каждый из этих рядов перекрывает другие.

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