近日转移数据库遇到一个递归查询问题,相信不少朋友在开发中都会遇到,通常特定数据库都有特定的实现。例如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)
实现完后发现性能不怎么样,希望有朋友有更好的实现可以共享下。
分享到:
相关推荐
在支持`WITH RECURSIVE`的数据库(如PostgreSQL、SQL Server)中,递归查询的通用语法如下: ```sql WITH RECURSIVE cte_name AS ( -- 初始化子查询(非递归部分) SELECT column1, column2, ... FROM table_...
递归查询的核心是CTE(通用表表达式),在这个例子中使用了`WITH`语句来定义名为`myT2`的CTE。CTE可以看作是一个临时的结果集,它只存在于其包含的查询内部,并且可以递归地引用自身。 - **递归基础**: `SELECT * ...
【SQL实现树形查询】 ...总结来说,SQL中实现树的查询通常涉及递归和自连接,通过用户定义函数(UDF)可以更方便地处理这些复杂查询。理解并熟练运用这些技术,将有助于在关系型数据库中高效地处理树形结构数据。
1. **递归查询**:通过WITH语句和公用表表达式(Common Table Expressions, CTEs)实现。 2. **外键**:用于维护数据库中表间引用完整性的约束。 3. **多表更新与删除**:允许一次操作影响多个表。 4. **窗口函数**...
│ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ ...
以上只是SQL语言中`SELECT`查询语句的一些基本知识点,实际应用中还有许多高级特性和优化技巧,如窗口函数、自连接、递归查询等,都需要根据实际需求深入学习和掌握。通过熟练运用这些知识,可以高效地管理和操作...
│ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql...
1. **SQL的通用性与Oracle的特异性** - SQL是一种标准,被大多数关系数据库系统所采用,如MySQL、PostgreSQL、SQL Server等。其语法基本一致,便于跨平台操作。 - Oracle是甲骨文公司开发的关系数据库管理系统,它...
然而,在实际应用中,需要进行SQL语法分析,如不同标准SQL互相翻译、面向SQL编辑器的报错提示、基于SQL语句的任务分析统计、SQL操作图形化等。 Flex和Bison是Unix环境下的分析工具,它们是lex和yacc的GNU版本。Flex...
12.2.2 避免子查询的错误执行计划 350 12.2.3 所在环境的资源不足等问题 351 12.3 本章习题、总结与延伸 351 第13章 动手,过程函数优化让SQL飞 352 13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 ...
BNF范式是通用语法分析工具能够接收的规则形式,但在实际应用中,复杂的BNF表达可能需要转换为更简单的左递归文法形式,以便于Bison等工具识别和处理。例如,“expression_list ::= ({expr},)+ | \"(\"({expr},)+\")...
如果条件是一个嵌套的JSON对象,可能需要递归处理以构建嵌套的SQL子查询。 总的来说,实现基于实体属性/表列名的前后端自定义通用条件查询需要对Java、数据库操作、JSON解析以及前端与后端的交互有深入的理解。通过...
1. 高级SQL功能:窗口函数、递归查询、集合操作、JSON支持等。 2. 分布式特性:GBase 8s的并行处理和分布式特性,如何利用这些特性处理大数据。 3. 复杂查询:如自连接、嵌套查询、多表联合查询等复杂情况下的SQL...
Codd提出关系模型以来,SQL便逐渐成为数据管理和查询的通用标准。 - **数据库简史**:书中概述了数据库技术的发展历程,从最初的文件系统到层次模型、网状模型,最终发展到如今广泛使用的基于关系模型的关系型...
12.2.2 避免子查询的错误执行计划 350 12.2.3 所在环境的资源不足等问题 351 12.3 本章习题、总结与延伸 351 第13章 动手,过程函数优化让SQL飞 352 13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 ...
在MySQL数据库中,通常我们不直接使用SQL来执行排序算法如冒泡排序,因为SQL是设计用来查询和操作数据的,而不是执行通用的计算或算法任务。然而,为了教学目的,我们可以尝试模拟冒泡排序的过程,但请注意这种方法...
在SQL Server中,公用表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在后续的查询中重复使用。CTE的一个强大特性是支持递归,这意味着它可以在自身的基础...
- **SQL-99/SQL3:** 加入了更多复杂特性,如递归查询、窗口函数等。 - **后续版本:** SQL2003、SQL2008、SQL2011等持续增加了新的特性和优化。 - **数据库简史:** - **早期阶段:** 数据库技术起源于1960年代...
表Nums通过递归填充来生成一系列数字,这对于测试不同类型的查询非常有用。 3. **删除聚集索引**: - 聚集索引决定了表中数据的物理存储顺序。在本例中,我们删除了Nums表上的唯一聚集索引,以便在后续的查询中...