sql выберите вид соединения - PullRequest
0 голосов
/ 29 марта 2011

Учитывая таблицу идентификаторов, 'точек' и координат, хотел бы создать представление (я думаю, что это должно быть представление) так, чтобы я мог получить список расстояний между всеми "указателями" для двух данных (внешний ключ) идентификаторы

таблица ввода

pointid (key), foreign_key, x, y
01,            id_x,        6, 2,
71,            id_x,        6, 1,
02,            id_y,        5, 9,
34,            id_z,        3, 8
42,            id_z,        2, 3,

желаемый вид, получить расстояния между всеми точками, принадлежащими id_x и id_y:

pointid_1,     pointid_2, distance
01,            02,        12 (or whatever distance is between 6,2 and 5,9)
71,            02,        12 (or whatever distance is between 6,1 and 5,9)

другой запрос будет, расстояния между всеми точками, принадлежащими id_x и id_z:

01,            34,        33 (distance between 6,2 and 3,8)
01,            42,        nn
71,            34,        nn
71,            42,        nn

и т.д.

Я могу выполнить вычисление расстояния sqrt (....), но не знаю, как выполнить объединение и объединить это с вычислением расстояния, или каким будет соответствующий запрос такого представления для получения приведенных выше результатов. .

это будет использовать sqlite3 с загруженными математическими расширениями lib для расстояния calc

1 Ответ

1 голос
/ 29 марта 2011
create view PAIRWISE_DISTANCE_SQUARES as
select 
  a.id as a_id,
  b.id as b_id,
  (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) as square
from point_table as a, point_table as b
-- where a.id != b.id if you wish

Этот вид даст вам квадраты расстояний между точками. SQLite не имеет sqrt, но квадраты так же хороши для сортировки, как и действительные расстояния.

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