这是一个使用 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/