SQL Server 用 graph table 如何写 recursive query

guostong 2020-07-30 04:39:37
SQL 从 2017开始支持 graph table, 想请教如何写 recursive query?

实例如下:
CREATE TABLE Person (
ID INTEGER PRIMARY KEY,
name VARCHAR(100)
) ;

CREATE TABLE friendOf AS EDGE;

INSERT INTO Person (Id, name)
VALUES (1, 'John')
, (2, 'Mary')
, (3, 'Alice')
, (4, 'Jacob')
, (5, 'Julie');

INSERT INTO friendOf
VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 1), (SELECT $NODE_ID FROM Person WHERE ID = 2))
, ((SELECT $NODE_ID FROM Person WHERE ID = 2), (SELECT $NODE_ID FROM Person WHERE ID = 3))
, ((SELECT $NODE_ID FROM Person WHERE ID = 3), (SELECT $NODE_ID FROM Person WHERE ID = 1))
, ((SELECT $NODE_ID FROM Person WHERE ID = 4), (SELECT $NODE_ID FROM Person WHERE ID = 2))
, ((SELECT $NODE_ID FROM Person WHERE ID = 5), (SELECT $NODE_ID FROM Person WHERE ID = 4));

查询 'John' 的朋友:

select p1.name, p2.name
from Person p1, friendOf f, Person p2
where match (p1-(f)->p2)
and p1.name = 'John'

但是如果我想查询所有的 'John' 的朋友, 一级朋友的朋友, ...
SQL 该如何写?

如果不用graph table 的话,是可以写recursive query的.

谢谢
...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧