Поиск значений в диапазоне средствами sql

Имеется таблица, содержащая информацию о координатах участков.

Номер строки|Код региона|Код Области|Начало|Конец
1           |30320      |1          |56,33 |56,41
2           |30320      |1          |56,28 |56,34
3           |30320      |1          |56,32 |56,34
4           |30320      |1          |56,33 |56,35
5           |30320      |1          |53,27 |53,3
6           |30320      |1          |53,01 |53,29
7           |30320      |1          |145,21|145,24
8           |30320      |1          |145,21|145,23

Необходимо найти участки, координаты которых пересекаются. Например, участок в строке 1 пересекается с участком в строке 2, так как совпадает КОД РЕГИОНА, КОД ОБЛАСТИ и конец участка в строке 2 находится между началом и концом первого участка (т.е. 56,33 < 56,34 < 56,41). Аналогично пересекается участок в строке 2 с участком в строках 3 и 4, и, соответственно, участки в строках 3 и 4 пересекаюстя с участками в строках 1 и 2. Я пытаюсь средствами sql реализовать выборку, в которой бы напротив каждой строки были бы указаны строки, с которой участок пересекается.

SELECT t1.ROWID, t1.KOD_WAY as KOD_REGION, t1.NUM_WAY as KOD_AREA, t1.START_KM, t1.END_KM,
t2.ROWID, t2.KOD_WAY as KOD_REGION, t2.NUM_WAY as KOD_AREA, t2.START_KM, t2.END_KM
FROM
(SELECT ROWID, KOD_WAY, NUM_WAY, START_KM, END_KM
FROM e_table) t2,
e_table t1
WHERE t1.KOD_WAY = t2.KOD_WAY AND
t1.NUM_WAY = t2.NUM_WAY
AND NOT(t1.START_KM > t2.END_KM OR t1.END_KM < t2.START_KM)
AND t1.ROWID <> t2.ROWID
ORDER BY t1.ROWID

В результате получаю таблицу, которая условно разделена на две части: левую и правую.

Меня результат вполне устраивает, за исключением того, что строки из правой части повторяются и в левой части таблицы. Поясню, для строки 30 (в левой части таблицы) найдены пересекающиеся участки в строках 100, 54 и 34 (выделено красным). Также и для строки 34 найдены пересекающиеся участки в строках 100, 54 и 30 (выделено желтым).

результат выгрузкии

Первый вопрос: Возможно ли средствами SQL настроить выборку так, чтобы получить только уникальное сочетание строк? Для моего примера должно получиться так, что сочетаются строки 30-100, 30-54 и 30-34, но не 34-30, 100-30, и 54-30.

И второй вопрос: Возможно ли сделать так, чтобы строки, которые уже есть в правой части, не повторялись в левой части таблицы? Заранее прошу прощения, если где-то что-то не так написал, в программировании совсем недавно. Надеюсь на вашу помощь.


Ответы (0 шт):