我正在尝试使用SQL Server图形处理来检索特定人员的所有朋友
[Person
表为node
╔════╦═══════╗║ID║名称║╠════╬═══════╣║1║大卫║║2║Suraj║║3║约翰║║4║瑞安║╚════牛皮═══════╝
[likes
作为edge
//为简单起见,我在这里不使用自动生成的ID]
╔════╦═══════╦═══════╦═══════════════════╗d ID║从║到║备注║╠════╬═══════╬═══════╬═══════════════════╣║1║大卫║Suraj║大卫喜欢Suraj║║2║大卫║约翰║大卫喜欢约翰║║3║John║Ryan║John喜欢Ryan║╚════牛皮═══════牛皮═══════牛皮═══════
我的图形查询中找到John的所有朋友会是这样
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
或箭头]更直观地进行调整吗?
预期结果
+ ------ + -------- +|姓名|朋友|+ ------ + -------- +|约翰|瑞安||约翰|大卫|+ ------ + -------- +:已添加预期结果更新
[我正在尝试使用SQL Server图形处理人员表将特定人员的所有朋友检索为节点║ID║名称╠════╬══ ║1║David║2║Suraj║3║...
您得到此答案的原因是由于边缘的定向特性。