postgresql可达性问题 递归查询

FLIGHTS
Origin:Destination:
AB
AC
BC
CD

CREATE TABLE flights(origin varchar(5),destination varchar(5));

INSERT INTO flights values('A','B'),('A','C'),('B','C'),('C','D');

找到所有(O->D),(出发点,起始点)

方法一(union):

需要找‘直达’+‘一次中转’+’两次中转‘+.....

为求简单只写了一次中转(..:..)

方法二(recursion):


注:在oracle和sqlserver中recursive被省略。

step 0:reach被初始化为空集合;

step i:reach(x,y):-flights(x,y)

             reach(x,y):-flights(x,z),reach(z,y)

step end:当reach集合不再变化。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试