Можно ли выбрать отношение между узлами в запросе OQGRAPH?
Я играю с механизмом хранения OQGRAPH для MariaDB https://mariadb.com/kb/en/library/oqgraph-storage-engine/ и хочу реализовать отношения между узлами.
Пример данных на основе https://mariadb.com/kb/en/library/oqgraph-examples:
Таблица: people_relationships
origid destid relationship
1 2 friend
2 3 friend
3 4 friend
4 5 father
2 6 mother
5 6 sibling
При запросе всех узлов destid для 1:
SELECT * FROM people_graph g
WHERE g.latch='dijkstras' AND g.origid=1;
Я получаю кратчайший путь к каждому узлу в последовательностях:
latch origid destid weight seq linkid
dijkstras 1 NULL 4 6 5
dijkstras 1 NULL 3 5 4
dijkstras 1 NULL 2 4 6
dijkstras 1 NULL 2 3 3
dijkstras 1 NULL 1 2 2
dijkstras 1 NULL 0 1 1
Но я также хочу знать, какой узел приводит к отношениям. Другими словами: какой узел является источником отношения (названный предвидением).
Пример:
latch origid destid weight seq linkid previd
dijkstras 1 NULL 4 6 5 4
dijkstras 1 NULL 3 5 4 3
dijkstras 1 NULL 2 4 6 2
dijkstras 1 NULL 2 3 3 2
dijkstras 1 NULL 1 2 2 1
dijkstras 1 NULL 0 1 1 NULL
Поэтому я могу ограничить результат особым видом отношений:
SELECT * FROM people_graph g
JOIN people_relationships d ON d.destid = g.linkid AND d.origid = g.previd
WHERE g.latch='dijkstras'
AND g.origid=1
AND d.relationship='friend';
Который возвращает друзей и друзей друзей, но без членов семьи.