У меня есть таблица, представляющая график: Края (от, до) .
Я бы хотел запросить эту таблицу с помощью «запросов пути», получая только источник и назначение пути.
Например, предположим, что моя таблица состоит из следующих строк:
+------+----+
| from | to |
+------+----+
| a | b |
| b | c |
| c | d |
| f | g |
| b | f |
| c | a |
+------+----+
Предположим, я выполняю следующий (псевдо) запрос:
SELECT ?v1, ?v2 WHERE ?v1 to ?t1, ?t1 to ?t2, ?t2 to ?v2;
Это означает, что я хочу, чтобы все пары источника и назначения существовали на всех путях, состоящих из 4 узлов. Выполнение этого запроса должно вернуть следующие результаты:
+-----+-----+
| ?v1 | ?v2 |
+-----+-----+
| a | a |
| a | g |
| a | d |
+-----+-----+
Конечно, могут понадобиться и пути, состоящие из разного количества узлов, число 4 не кодируется жестко: -)
Мои вопросы:
- Какой лучший способ построить такой запрос SQL (обратите внимание, что я использую SQLite, поэтому рекурсивные запросы использовать нельзя).
- В настоящее время у меня есть один индекс для столбца из и один для столбца до . Это оптимально? Должен ли я создать индекс для пары " from, to ?" Вместо этого?
Предположения
Нет собственных краев (E.G "a - a").
Нет двух одинаковых строк.
Заранее спасибо!