0

这是一个使用 sql CTE 的查询来创建包含用户之间关系的表的传递闭包。(图的边缘)。这如何在 mySQL 中完成?

WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
( SELECT a, b, 1 AS 距离,
         一个 || '。' || 乙 || '。' 作为路径字符串
  从边缘
 WHERE a = 1 -- 来源

  联合所有

  选择 tc.a, eb, tc.distance + 1,
         tc.path_string || eb || '。' 作为路径字符串
  FROM 边缘 AS e
  加入transitive_closure AS tc ON ea = tc.b
 WHERE tc.path_string NOT LIKE '%' || eb || '.%'
)
  选择 * FROM 传递闭包
  ORDER BY a, b, distance;

或者至少找到两个节点之间的所有简单路径,而不为所有节点创建传递闭包。代码取自:http ://techportal.inviqa.com/2009/09/07/graphs-in-the-database-sql-meets-social-networks/

4

0 回答 0