Храните все возможные маршруты между двумя узлами - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть две основные таблицы с именем Node & Edge и две таблицы кеша Route & RouteNodes.Схема выглядит следующим образом:

Schema

Мне нужно написать процедуру, которая выполняется при вставке узла и ребра, тогда каждый возможный маршрут с существующими узлами будетхранить в Route и RouteNode.

Я пробовал много решений, и одним из них является следующий запрос:

;WITH children AS
    (

       SELECT 
         FromNode,
        CAST(ISNULL(convert(varchar,FromNode) + '->' ,'')  + convert(varchar,ToNode) AS VARCHAR(4000)) AS Path
       FROM Edge 
       WHERE FromNode =  1 
     UNION ALL
       SELECT 
         t.FromNode,
         list= CAST(ISNULL(convert(varchar,t.FromNode)  + '->' ,'')  + d.Path AS VARCHAR(4000))
       FROM Edge t
       INNER JOIN children  AS d
            ON (t.ToNode = d.FromNode)
     )

    SELECT * 
    from children

Но он дает только смежные узлы.Мои данные и результат:

enter image description hereenter image description here

Я ожидаю, что результат будет примерно таким:

1->3
1->3->2
1->3->2->5
1->3->2->5->6
.........
1->4
1->6
1->6->7

и так далее.Если это невозможно / астрономически, тогда я хочу ввести два узла и затем сохранить все возможные маршруты.

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