我正在尝试使用 SQL Server 图形处理检索特定人的所有朋友
Person
表为node
╔════╦═══════╗ ║身份证║姓名║ ╠════╬═══════╣ ║ 1 ║ 大卫 ║ ║ 2 ║ 苏拉杰 ║ ║ 3 ║ 约翰 ║ ║ 4 ║ 瑞恩 ║ ╚════╩═══════╝
likes
作为edge
// 为简单起见,我在这里不使用自动生成的 ID
╔════╦═══════╦═══════╦═══════════════════╕ ║ Id ║ From ║ To ║ 备注 ║ ╠════╬═══════╬═══════╬═══════════════════╣ ║ 1 ║ David ║ Suraj ║ David 喜欢 Suraj ║ ║ 2 ║ 大卫 ║ 约翰 ║ 大卫喜欢约翰 ║ ║ 3 ║ John ║ Ryan ║ John 喜欢 Ryan ║ ╚════╩═══════╩═══════╩═══════════════════╕
我查找约翰所有朋友的图表查询将是这样的
select p1.name, p2.name [friend]
from person p1, likes l, person p2
where p1.name = 'John' and match(p1-(l)->p2)
这将返回以下结果集
╔══════╦════════╗ ║名字║朋友║ ╠══════╬════════╣ ║约翰║瑞恩║ ╚══════╩════════╝
问题是我们得到了所有约翰喜欢的人,其中不包括喜欢约翰的人(在本例中为大卫)。在现实世界中,如果一个人是我的朋友,我也是他的朋友,对吧?我知道我可以用union
这里找到所有喜欢 John 的人并加起来。但是对于寻找朋友的朋友的情况,情况会变得更糟。我们可以用Match
或 箭头更直观地进行调整吗
预期结果
+--------+--------+ | 姓名 | 朋友 | +--------+--------+ | 约翰 | 瑞安 | | 约翰 | 大卫 | +--------+--------+
更新:添加了预期结果