`
2007yn
  • 浏览: 43306 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DB2 递归查询

阅读更多

  表的结构是  
  origin     destination   distance  
  ---------------------------------------  
  Germany     New York     8000  
  Germany     Chicago     8700  
  Chicago               Austin                1300  
  New York             Houston            2100  
  Houston              Austin                300  
  New York            Chicago              950  
  Italy                    New York           10000  
  Ireland               Chicago              10700  
  Chicago              Toronto              400  
  New York            Toronto              350  
  Mexico                Houston             770  
   
  SQL语句是  
  WITH   path   (origin,   destination,   distance,  stops)  
  AS(  
        SELECT   origin,   destination,   distance,  0    
        FROM     flights 
        WHERE    origin='Germany'  
  UNION   ALL  
        SELECT   p.origin, f.destination, p.distance+f.distance,   p.stops+1  
        FROM     flights   f,   path   p  
        WHERE    p.destination=f.origin)  
   
  SELECT   origin,   destination,   distance,   stops   FROM   path    
   
  结果是  
  origin     destinat    distance             stops  
  -----------------------------------------------------------  
  Germany     New York    8000                   0  
  Germany     Chicago    8700                   0  
  Germany             Houston            10100                 1  
  Germany             Chicago             8950                   1  
  Germany             Toronto             8350                   1  
  Germany             Austin               10000                  1  
  Germany             Toronto             9100                   1  
  Germany             Austin               10400                  2  
  Germany             Austin               10250                  2  
  Germany            Toronto              9350                   2 


第一次执行结果:  
          第一个select语句产生的结果为  
          path:        origin                destination                 distance               stops  
                           Germany               New   York                  8000                   0  
                           Germany               Chicago                     8700                   0  
          第二个select语句执行的结果为      
          path:         origin                destination                 distance               stops  
                        Germany               Hunston                     8000+2100             1  
                        Germany               Chicago                     8000+950               1  
                        Germany               Toronto                     8000+350               1  
                        Germany               Austin                      8700+1300              1  
                        Germany               Toronto                     8700+400               1  
          union   后的结果为:  
          path:        origin                destination                 distance               stops  
                        Germany               New   York                  8000                      0  
                        Germany               Chicago                     8700                       0  
                        Germany               Hunston                     8000+2100            1  
                        Germany               Chicago                     8000+950               1  
                        Germany               Toronto                     8000+350               1  
                        Germany               Austin                      8700+1300               1  
                        Germany               Toronto                     8700+400               1  
   
  第二次递归调用结果:(path发生了改变,重新执行第二个select子句)  
          path:        origin                destination                 distance               stops  
                        Germany               New   York                  8000                        0  
                        Germany               Chicago                     8700                         0  
                        Germany               Hunston                     8000+2100              1  
                        Germany               Chicago                     8000+950                 1  
                        Germany               Toronto                     8000+350                  1  
                        Germany               Austin                      8700+1300                 1  
                        Germany               Toronto                     8700+400                  1  
                        Germany               Austin                      8700+2100+300          2  
                        Germany               Austin                      8000+950+1300          2  
                        Germany               Toronto                     8000+950+400          2 

分享到:
评论

相关推荐

    在db2和oracle中的对树的递归查询语句

    NULL 博文链接:https://flysky7931.iteye.com/blog/706171

    DB2递归.docx

    DB2递归.docx 1. 递归查询和初始查询结果必须包含相同数量的数据列; 2. 递归查询和初始查询结果数据列的、长度等必须一致; 3. 递归查询不能包含 GROUP BY 或者 HAVING 子句; 4. 递归查询不能包含 Outer Join...

    DB2循环递归实例很有用的

    DB2循环递归实例 自己编写的 比较有用的

    DB2递归实现

    实现ORACLE 的CONNECT by。可以实现一些难以在db2上实现的递归操作

    SQL_WITH_AS实现父子递归查询

    sql 2005中用CTE实现递归的很好很易懂很基础的例子讲解。

    db2培训文档,语法、函数、存储过程、实例、聚集、递归等

    1、sql 简介 2.DB2 DML语言介绍 3.DB2语法 语法,实例 4.db2 常用函数介绍 5.db2 存储过程

    db2-技术经验总结

    1.14. 使用递归制造测试数据(原) 42 1.15. 尽量使用自定义函数来代替存储过程 42 1.16. VALUES(…) 与 VALUES …的区别(原) 44 1.17. DB2的表锁和行锁 45 1.18. 修改表结构后不允许对表进行任何操作(原) 57 1.19. ...

    将 CONNECT BY 移植到 DB2

    本文通过例子逐步描述如何将 CONNECT BY 语法和相关的伪列映射到 DB2® Universal Database™(DB2 UDB) for Linux®、UNIX® 和 Windows® 中的公共表表达式。

    使用BULK COLLECT, MERGE 语句提高sql执行效率

    详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询

    sql2005教程

    (转)使用公用表表达式的递归查询(SQLSERVER2005) 2005Beta2概览 sql server 2005 建立链接服务器 SQL Server 2005:数据类型最大值 SQL Server 2005:向系统表说再见 SQL Server 2005:这个螃蟹谁先吃 SQL ...

    程序员的SQL金典6-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典7-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典4-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典3-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典.rar

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用

    数据库学习基础之名词解释

    具体为:递归查询的优化、规则的一致性维护等。  Access数据库  美国Microsoft公司于1994年推出的微机数据库管理系统。它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面数据库管理系统。...

Global site tag (gtag.js) - Google Analytics