Bo's Oracle Station

查看: 1092|回复: 0

递归WITH

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2020-10-11 16:36:18 | 显示全部楼层 |阅读模式
  1. create table flights ( source varchar2(2) ,
  2.                                   destin varchar2(2),
  3.                                   flight_time number ) ;
  4.                                                                     
  5. insert into flights values ( 'A', 'B' ,1 );

  6. insert into flights values ( 'C', 'D' ,2 );

  7. insert into flights values ( 'B', 'C' ,1 );

  8. commit;
复制代码
  1. select  * from flights;
复制代码
A    B    1
C    D    2
B    C    3


  1. WITH Reachable_From  (Source, Destin, Flight_time)  AS
  2. (
  3. SELECT Source, Destin, Flight_time
  4. FROM Flights
  5. UNION ALL
  6. SELECT a.Source, b.Destin,
  7. a.Flight_Time+b.Flight_time
  8. FROM Reachable_From a, Flights b
  9. WHERE a.Destin = b.Source
  10. )
  11. SELECT *
  12. FROM Reachable_From;
复制代码
A    B    1
C    D    2
B    C    1
A    C    2
B    D    3
A    D    4

把一张表看成两张表,
把WITH定义的当作第一张表,原表当作第2张表,
UNION ALL,
第一张表的第一个字段,第二张表的最后一个字段,
条件是:第一张表的最后一个字段=第二张表的第一个字段

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-5-2 18:07 , Processed in 0.035114 second(s), 24 queries .

快速回复 返回顶部 返回列表