Я пытаюсь получить всех друзей определенного человека, используя SQL Обработка серверного графика
Person
таблицы как node
╔════╦═══════╗
║ Id ║ Name ║
╠════╬═══════╣
║ 1 ║ David ║
║ 2 ║ Suraj ║
║ 3 ║ John ║
║ 4 ║ Ryan ║
╚════╩═══════╝
likes
в качестве edge
// для простоты я не использую здесь автоматически сгенерированные идентификаторы
╔════╦═══════╦═══════╦═══════════════════╗
║ Id ║ From ║ To ║ Remarks ║
╠════╬═══════╬═══════╬═══════════════════╣
║ 1 ║ David ║ Suraj ║ David likes Suraj ║
║ 2 ║ David ║ John ║ David likes John ║
║ 3 ║ John ║ Ryan ║ John likes Ryan ║
╚════╩═══════╩═══════╩═══════════════════╝
Мой запрос на графике, чтобы найти всех друзей Джона, был бы таким:
select p1.name, p2.name [friend]
from person p1, likes l, person p2
where p1.name = 'John' and match(p1-(l)->p2)
, и это будет вернуть приведенный ниже набор результатов
╔══════╦════════╗
║ name ║ friend ║
╠══════╬════════╣
║ John ║ Ryan ║
╚══════╩════════╝
Проблема в том, что мы получили всех людей, которых любит Джон, за исключением тех, кто любит Джона (в данном случае Дэвида). В реальном мире, если человек мой друг, я тоже его друг, верно? Я знаю, что могу использовать union
здесь, чтобы найти всех людей, которые любят Джона, и добавить к вышесказанному. Но это сделает худший случай для сценария ios, где найти друга друзей. Можем ли мы сделать это более интуитивно с помощью Match
или стрелок
Ожидаемый результат
+------+--------+
| Name | Friend |
+------+--------+
| John | Ryan |
| John | David |
+------+--------+
обновление : ожидаемый результат добавлен