想象,像这样的表中有社交媒体数据:
u1 u2
0 3
1 2
1 4
2 3
3 1
3 4
这意味着:
现在我想知道:从用户0到用户2的方式/路径吗?
是的。用户0跟随用户3。用户3跟随用户1。用户1跟随用户2。
但是如何作为SQL命令解决此问题?
我想知道是否存在这样的路径。可选我想知道路径是什么。是否有可能以某种方式获得最短路径?
答案 0 :(得分:1)
下面的查询在MySQL 8.x中有效,因为它需要“递归公用表表达式”(递归CTE):
with n (initial, path, current) as (
select u1, concat('', u1, '/', u2), u2 from my_table
where u1 = 0 -- initial node
union all
select n.initial, concat(n.path, '/', m.u2), m.u2
from my_table m
join n on n.current = m.u1
)
select * from n
where current = 2 -- target node
但是,如果您使用的是MySQL 5.x,那么您就不走运了(据我所知)。