深sqloracle递归查询
从中选择名称,xtype = U
选择名称列的id是(选择最大值(ID),从中
一些递归查询数据
的递归查询SQLServer2005和Oracle的SQL语句中的两个版本
在使用Oracle认为其递归查询是非常好的,我们的研究发现,它还支持SQLServer的SQL递归查询。
例子如下:
SQL的SQLServer2005版本如下:
例如,表具有id和PID字段,id是主键,PID表示其优越的节点、表结构和数据:
创建表{ } }(
{ null,
{ null,
{姓名} { nchar }(10)
)
去
INSERT INTO AAA VALUES (1,0,'a')
插入AAA值(0,B)
插入AAA值(3,1,C)
插入AAA值(4,1,会)
插入AAA值(5,2,e)
插入AAA值(6,3,F)
插入AAA值(7,3,'克')
插入AAA值(8,4,H)
去
-以下SQL是查询1个节点的所有子节点
作为与my1(SELECT * aaa id = 1)
联盟的所有选择AAA。* my1,AAA,my1.id = aaa.pid
)
SELECT * FROM my1 -它包含1的记录,如果你不想有,可最后补充道:在ID <> 1
-以下SQL是查询8个节点的所有父节点
作为与my1(SELECT * aaa id = 8)
联盟的所有选择AAA。* my1,AAA,my1.pid = aaa.id
)
SELECT * FROM my1;
-以下是递归删除1个节点和所有子节点的语句:
作为与my1(SELECT * aaa id = 1)
联盟的所有选择AAA。* my1,AAA,my1.id = aaa.pid
)
删除从AAA存在(选择ID从my1哪里my1.id = AAA。ID)
SQL的Oracle版本如下所示:
例如,ID和PID字段的表,ID是主键,PID代表其上级节点,表结构和数据参考SQLServer2005,SQL如下:
-以下SQL是查询1个节点的所有子节点
从AAA中选择*
从id = 1开始
通过pid连接
-以下SQL是查询8个节点的所有父节点
从AAA中选择*
从id = 8开始
通过事先连接pid = id
今天,帮助别人做一点有趣的sql,也是递归的,下面:
假设有一个销售表如下所示:
创建表{ TB }(
{ } } { int QJ空,月,这个测试从一月开始,连续几个月的数据,并在中间有没有分区。
{ null },这个月的实际销售金额
{ } { } RWE int空,因为这个月的销售任务
{ } { } FLD浮动空本月退税点大于任务量,及退税金额是杰* FLD
在{主}上
现在需要计算每月的回扣数额。规则如下:
一月的销售金额大于任务的回扣金额=回扣点
二月的销售额大于任务的回报(=每月1折扣)*折扣点。
3月份的销售额大于任务的退货额(每月1,2折扣)*折扣点。
下个月是类似的。当销售额少于任务时,利润是0。
具体的SQL如下所示:
复制代码代码如下所示:
与my1(如
*选择,
案例
当我> RWE然后(JE×FLD)
其他0
最后文件,
铸(0为浮点)TMP
从肺结核
其中QJ = 1
联盟的所有
选择TB *,
案例
当tb.je > tb.rwe然后(tb.je my1.fle - my1。TMP)
* tb.fld
其他0
最后文件,
my1.fle + my1.tmp TMP——积累上月返回
从my1,
肺结核
在tb.qj = my1.qj + 1
)
*选择
从my1
SQLServer2008使用表达式的递归查询
-父项的递归从属项
与热膨胀系数(ID,ParentID,文本)
作为
(父项目
选择ID,ParentID,文本从TreeView,ParentID = 450
联盟的所有
-递归结果集的较低级别
选择t.id,t.parentid,t.text TreeView T
内加入膨胀系数C t.parentid =入境
)
选择ID,ParentID,文本从CTE
贸易数据交换
自回归父类以来——
与热膨胀系数(ID,ParentID,文本)
作为
(子父项)
选择ID,ParentID,TreeView id是450的文本
联盟的所有
-递归结果集的父项。
选择t.id,t.parentid,t.text TreeView T
内加入膨胀系数C = c.parentid t.id
)
选择ID,ParentID,文本从CTE