`
ttkktt
  • 浏览: 27355 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通用标准SQL的递归查询

阅读更多

近日转移数据库遇到一个递归查询问题,相信不少朋友在开发中都会遇到,通常特定数据库都有特定的实现。例如Oracle可以用

Select * from …. Where [结果过滤条件语句]

Start with  [and起始条件过滤语句]

Connect by prior [and中间记录过滤条件语句] 

但是用非标准的sql来实现会和数据库绑定,当你的项目要变更数据库时会遇到你的程序逻辑运行出错。几经思考发现可以用标准sql自连接来实现递归功能,例子:

有如下表tb(id,startpoint,endpoint);

1 | A | B

2 | A | C

3 | A | D

4 | B | E

5 | C | F

6 | D | B

7 | E | I

8 | G | H

查找出从A出发可以到达的目的点。(结果应该是B,C,D,E,F,I)

 

(select a from

(select table1.endpoint a,table2.endpoint b

from tb table1, tb table2

where table1.endpoint=table2.startpoint) newtable1)

union

(select b from

(select table1.endpoint a,table2.endpoint b

from tb table1, tb table2

where table1.endpoint=table2.startpoint) newtable2)

 

实现完后发现性能不怎么样,希望有朋友有更好的实现可以共享下。


 

 

1
0
分享到:
评论

相关推荐

    经典SQL脚本大全

    │ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ ...

    Sqlserver2000经典脚本

    │ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql...

    收获不止SQL优化

    12.2.2 避免子查询的错误执行计划 350 12.2.3 所在环境的资源不足等问题 351 12.3 本章习题、总结与延伸 351 第13章 动手,过程函数优化让SQL飞 352 13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 ...

    laravel5无限极分类递归

    部门管理的无限极分类 产品分类也是通用 包括一个controller文件 一个model文件 一个view文件夹 和一个sql文件 放在相应位置按需求改动即可使用

    收获,不止SQL优化--抓住SQL的本质

    12.2.2 避免子查询的错误执行计划 350 12.2.3 所在环境的资源不足等问题 351 12.3 本章习题、总结与延伸 351 第13章 动手,过程函数优化让SQL飞 352 13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 ...

    SQL Server 2008高级程序设计 4/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    unionQuery:联合查询系统

    支持多sql多数据库表sql间的递归关联查询, 如一个查询表单中配置了3个查询sql, 可用用第一个sql的查询结果中的某个字段作为第二个查询sql的where条件 单sql查询的支持分页 查询功能配置步骤 创建数据源 创建查询业务...

    sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期

    CTE是在内存中准备好数据,而不是每次一条往返服务器和客户端一次。如果需要再插入到临时表...这篇文章主要介绍了sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期 ,需要的朋友可以参考下

    SQLServer2000高级编程技术(part02)-想学存储过程 SQL编程 务必要看

    7.2.4 一种通用的出错处理方法 7.2.5 XACT_ABOR 7.2.6 Raiserro 7.3 小结 7.4 练习 第8章 确定专业的编程风格 8.1 源代码控制的概念 8.1.1 Microsoft Visual SourceSafe简介 8.1.2 管理Visual SourceSafe数据库 ...

    SQL Server 2008高级程序设计 2/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    7.2.4 一种通用的出错处理方法 7.2.5 XACT_ABOR 7.2.6 Raiserro 7.3 小结 7.4 练习 第8章 确定专业的编程风格 8.1 源代码控制的概念 8.1.1 Microsoft Visual SourceSafe简介 8.1.2 管理Visual SourceSafe数据库 ...

    SQL Server 2008高级程序设计 5/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    SQL Server 2008高级程序设计 6/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    关键:用于SQL,数据记录和图形查询的通用二进制数据库

    除了SQL,Crux还提供了查询接口,该接口可用于表示复杂的联接和递归图遍历。 快速链接 < groupId>juxt < artifactId>crux-core < version>20.12-1.13.0-beta [juxt/crux-core " 20.12-1.13.0-beta " ] juxt/...

    SQL Server 2008高级程序设计 1/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    SQL Server 2008高级程序设计 3/6

     3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的提示  4.4 层次数据概述 ...

    PLSQLDeveloper下载

     结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得...

Global site tag (gtag.js) - Google Analytics