Создание списка смежности из таблицы базы реляционных данных

#sql #oracle #recursive-query #adjacency-list

#sql #Oracle #рекурсивный-запрос #список смежности

Вопрос:

У меня есть такая таблица

 name  |  time
a     |  1:00
b     |  1:05
a     |  1:10
c     |  1:15
d     |  1:20
b     |  1:29
e     |  1:30
a     |  1:31
f     |  1:36
  

Теперь я получаю каждый раз и хочу получить последовательность классов на 5 минут выше и ниже.

 a  : a->b
b  : a->b->c
a  : b->a->c
c  : a->c->d
d  : c->d
.    .
.    .
.    .
  

и я хочу сохранить эту последовательность в списке смежности. Как показано в таблице ниже

 parent_name | child_name | graph id
  a         |   b        |    1
  a         |   b        |    2
  b         |   c        |    2
  b         |   a        |    3
  a         |   c        |    3
  

Кто-нибудь может сказать мне, как я могу это сделать, используя SQL-запросы?

Комментарии:

1. Какую СУБД вы используете? Postgres? Oracle?

2. Я использую СУБД Oracle

Ответ №1:

Я думаю, что вы ищете модель вложенного набора. Это задокументировано в wiki. Реализация и примеры являются общими и работают со всеми SQL-совместимыми движками, но в Oracle вы можете настроить его так, чтобы вы могли воспользоваться предложением CONNECT BY в инструкции SELECT .