Возможно ли написать такой SQL запрос, в котором значения зависят друг от друга в одной таблице?

Возможно ли написать такой SQL запрос, в котором значение из одной записи таблицы зависит от другой (одной или нескольких) записи той же самой таблицы? Используется только одна таблица.

Пример задачи:
Рассмотрим таблицу, в которой хранятся расстояния до определенных объектов от некоторой точки. Т.е., допустим, расстояния от дома до садика, школы, магазина и т.д, только которые, условно говоря, находятся на одной прямой. Т.е. координата определяется одним числом.
В таблице содержится 2 столбца. Первый столбец id (id объекта, садика, магазина...), второй distance (расстояние от дома до данного объекта).

Необходимо получить набор расстояний между самими объектами, причем расстояния между объектами должны соблюдать определенную зависимость(эту зависимость задает сам пользователь) между собой. Т.е., к примеру, необходимо найти такие пути между объектами, где расстояние от объекта_1 до объекта_2 должно быть в 2 раза больше, чем расстояние от объекта_2 до объекта_3.

Исходные данные:
42d2373705.jpg
Вот что должно получится:
b40fbfabc4.jpg5d2a90e87b.jpg

В данных результатах комбинации id выбраны не все, но суть думаю ясна.
Путь может составляться от 1 до нескольких сотен расстояний, где они друг от друга определенным образом зависят. Т.е. объект_1 может зависеть от объекта_43, а объект_43 от объекта_24 и объекта_78 и т.д. У некоторых расстояний может быть задана фиксированная величина без зависимостей. Объектов в таблице (записей) может быть от 100.000 до нескольких десятков миллионов.

Подскажите пожалуйста, как решить эту задачу запросами в Mysql (необязательно mysql), и вообще возможно ли? Или возможно это сделать какими-либо определенными СУБД? Если да, то какими? Если средствами базы это сделать невозможно, то какие подскажете математические методы решения данной задачи? Решить это можно конечно, написав программу, но она будет очень ресурсоемкая и "долгоиграющая", т.к., на самом деле, задача у меня не совсем такая. Я ее упростил, чтобы была яснее суть.
  • Вопрос задан
  • 394 просмотра
Пригласить эксперта
Ответы на вопрос 1
batiscaff
@batiscaff
php-разработчик широкого профиля
Конкретно представленный пример, на вскидку, можно решить вот так:
SELECT t1.id, t2.id, t3.id
FROM my_table t1
JOIN my_table t2 ON t2.id > t1.id AND t1.distance <> t2.distance
JOIN my_table t3 ON t3.id > t2.id
WHERE ABS(t1.distance - t2.distance) = 2*ABS(t2.distance - t3.distance)
Но это только для небольших наборов данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы