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