У меня есть таблица с разделением карты мира. Разделение осуществляется путем разделения всей области на прямоугольники, называемые «плиткой». Как обычно, прямоугольник имеет нижний левый и верхний правый углы, оба обозначаются координатами с плавающей точкой.
Задача такая:
Для каждой плитки возьмите ее соседа справа и соседа сверху, как набор {tile_id, id_of_top_neighbour, id_of_right_n}
.
Под правым соседом мозаичного элемента A подразумевается такой мозаичный элемент B, который имеет ближайшую координату min_x к координате max_x A, а y совпадают.
Описание таблицы:
integer tile_id; --Tile id. PK.
real min_x; --X coordinate of bottom-left point
real min_y; --Y coordinate of bottom-left point
real max_x; --X coordinate of upper-right point
real max_y; --Y coordinate of upper-right point
Неудачное решение:
Сначала я попытался отсортировать по одной координате, перебрать этот набор результатов на стороне Java, а затем выполнить дополнительный выбор для каждой строки. Спектакль был неадекватным.
Теперь мне интересно, возможно ли решение на чистом SQL быстрее и быстрее во время выполнения ...
Заранее оценил любую помощь или идеи.
EDIT:
Между двумя тайлами может быть промежуток, поэтому (например, для правого соседа) B.min_x - A.max_x может быть> 0. Однако, две плитки не могут пересекаться больше, чем по границе.
Мы используем Postgres 8,3