Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго времени суток!
Есть таблица intervals(id,first,last), содержащая интервалы чисел. Интервал определен нижней и верхней границей. Интервалы не пересекаются, но один интервал может включать другой (то есть не может быть двух пар типа (1,5) и (3,7), потому что эти интервалы пересекаются ), но могут быть пары (1,7), (1,6), (3,5), (4,4).
Пытаюсь составить запрос, который выбросит все внутренние интервалы, а оставит только внешние.
Пробовал путем
SELECT
distinct t2.id
FROM
intervals t1,intervals t2
where
t2.first<=t1.first and
t2.last>=t1.last and
t1.id!=t2.id
но такой запрос срабатывает лишь если "уровень вложенности" равен 1, а на содержимом, например
(1,10)
(2,6)
(3,4)
выбрасывает только (3,4), а по идее должен выбросить интервал (2,6) тоже.
Подскажите как это можно сделать (если можно) кто знает, плиз.
Неактивен
Неактивен
Спасибо огромное!!! Осталось расшифровать :-), но это уж как-нибудь.
Неактивен
Сначала сортируем данные так чтобы шел внешний интервал и все вложенные в него
Неактивен
Спасибо! Теперь всё понятно.
Неактивен
Кстати, третий селект лишний. Проверку уровня вложенности можно проводить сразу во втором.
Неактивен
Я сначала просто поставил в условии проверку на нулевой уровень вложенности @i=0 перед if().. и получил закономерный результат.
Вот только есть опасение, что оптимизатор может и поменять порядок проверки условий в части where. Или он понимает, что в случае с переменными порядок имеет значение и не будет его менять?
Неактивен
Страниц: 1