获取数据库所有表名,表的所有列名 select name from sysobjects where xtype='u'

select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')

查询数据sql语句里的递归查询 sqlServer2005和Oracle 两个版本

以前使用Oracle,觉得它的递归查询很好用,就研究了一下sqlServer,发现它也支持在sql里递归查询

举例说明:

sqlServer2005版本的sql如下:比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:

CREATE TABLE [aaa](

[id] [int] NULL,

[pid] [int] NULL,

[name] [nchar](10)

)

GO

INSERT INTO aaa VALUES(1,'a')

INSERT INTO aaa VALUES(2,'b')

INSERT INTO aaa VALUES(3,1,'c')

INSERT INTO aaa VALUES(4,'d')

INSERT INTO aaa VALUES(5,2,'e')

INSERT INTO aaa VALUES(6,3,'f')

INSERT INTO aaa VALUES(7,'g')

INSERT INTO aaa VALUES(8,4,'h')

GO

--下面的sql是查询出1结点的所有子结点with my1 as(select * from aaa where id = 1

union all select aaa.* from my1,aaa where my1.id = aaa.pid

)

select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1

--下面的sql是查询出8结点的所有父结点with my1 as(select * from aaa where id = 8

union all select aaa.* from my1,aaa where my1.pid = aaa.id

)

select * from my1;

--下面是递归删除1结点和所有子结点的语句:with my1 as(select * from aaa where id = 1

union all select aaa.* from my1,aaa where my1.id = aaa.pid

)

delete from aaa where exists (select id from my1 where my1.id = aaa.id)

Oracle版本的sql如下:比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据请参考sqlServer2005的,sql如下:

--下面的sql是查询出1结点的所有子结点SELECT * FROM aaa

START WITH id = 1

CONNECT BY pid = PRIOR id

--下面的sql是查询出8结点的所有父结点SELECT * FROM aaa

START WITH id = 8

CONNECT BY PRIOR pid = id

今天帮别人做了一个有点意思的sql,也是用递归实现,具体如下:

假设有个销售表如下:CREATE TABLE [tb](

[qj] [int] NULL,-- 月份,本测试假设从1月份开始,并且数据都是连续的月份,中间没有隔断

[je] [int] NULL,-- 本月销售实际金额

[rwe] [int] NULL,-- 本月销售任务额

[fld] [float] NULL -- 本月金额大于任务额时的返利点,返利额为je*fld

) ON [PRIMARY]

1月份销售金额大于任务额 返利额=金额*返利点

2月份销售金额大于任务额 返利额=(金额-1月份返利额)*返利点

3月份销售金额大于任务额 返利额=(金额-1,2月份返利额)*返利点

以后月份依次类推,销售额小于任务额时,返利为0

具体的sql如下:

代码如下:

WITH my1 AS (

SELECT *,

CASE

WHEN je > rwe THEN (je * fld)

ELSE 0

END fle,

CAST(0 AS FLOAT) tmp

FROM tb

WHERE qj = 1

UNION ALL

SELECT tb.*,

CASE

WHEN tb.je > tb.rwe THEN (tb.je - my1.fle -my1.tmp)

* tb.fld

ELSE 0

END fle,

my1.fle + my1.tmp tmp -- 用于累加前面月份的返利

FROM my1,

tb

WHERE tb.qj = my1.qj + 1

)

SELECT *

FROM my1

sqlserver2008使用表达式递归查询

--由父项递归下级

with cte(id,parentid,text)

as

(--父项

select id,text from treeview where parentid = 450

union all

--递归结果集中的下级

select t.id,t.parentid,t.text from treeview as t

inner join cte as c on t.parentid = c.id

)

select id,text from cte

---------------------

--由子级递归父项

with cte(id,text)

as

(--下级父项

select id,text from treeview where id = 450

union all

--递归结果集中的父项

select t.id,t.text from treeview as t

inner join cte as c on t.id = c.parentid

)

select id,text from cte

总结

以上是编程之家为你收集整理的深入sql oracle递归查询全部内容,希望文章能够帮你解决深入sql oracle递归查询所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

oracle用一个字段往上递归,深入sql oracle递归查询相关推荐

  1. aix升级新安装oracle,怎么样在AIX 5L上安装与升级Oracle

    怎么样在AIX 5L上安装与升级Oracle 1.检查环境 检查硬件与OS位数,一定确保64bit #bootinfo -y 64 #bootinfo -K 64 检查内存大小,至少需要512M以上 ...

  2. oracle使一个字段自增,Oracle数据库实现一个字段自增

    对于SQL SERVER数据库实现字段自增比较简单,可以之间使用函数:identity(),例如我们在建表时可以这样实现: create table tbRentInfo( sID int ident ...

  3. oracle取一个字段去重复,oracle 多个字段去重复

    去除邮编番号,地址1,2,3相同的数据: (select        t1.pstl_code,        t1.addr_ln_1,        t1.addr_ln_2,        t ...

  4. oracle统计一个班男生女生,用一条sql统计所一个班级的男女人数

    有一个 学生记录的表student,形式如下:  name  class sex  1 a 男 2 b 女 3 c 男 4 a 男 5 a 女 6 a 男 --  现要统计每个班级的男女人数,结果如下 ...

  5. oracle 建立一个游戏库,Power Designer怎么新建Oracle数据?建立Oracle数据教程分享

    powerdesigner是一款开发人员常用的数据库建模工具.最近许多小伙伴在使用Power Designer的时候,不知道怎么建立Oracle数据?下面游戏爱好者小编就分享了Power Design ...

  6. Oracle ora-15070,查询字段过多触发了Oracle的BUG?【ORA-01465: 无效的十六进制数字】...

    当我使用以下INSERT INTO SELECT语法操作数据库时,报ORA-01465的错误,然后当我削减插入字段和查询字段,该错误消失了. 所以我怀疑这是Oracle的一个bug. 如果有比较了解O ...

  7. oracle rac节点重启,oracle RAC一个节点频繁重启解决

    oracle RAC一个节点频繁重启解决 类别:Oracle数据库   作者:码皇   来源:hijk139的专栏     点击: oracle RAC一个节点频繁重启解决故障现象:2011年的一次问 ...

  8. 如何使用ftp从Metalink上下载补丁updates.oracle.com

    Oracle提供一个站点可以用于通过ftp下载Oracle的所有Patch,这个站点是updates.oracle.com. 我们可以在命令行登录,当然需要一个Metalink帐号认证: C:> ...

  9. 用一个类根据Model属性生成SQL语句

    想到写这个的原因是我和我的一个朋友在写一个开源项目的时候,我负责了数据库的持久化存储部分,结果他看到了我的数据库数据存储结构之后直接傻眼了,因为个人比较简单粗暴,直接把一个数据Model归档成为二进制 ...

最新文章

  1. Android 通过Intent调用系统功能和Action动作和服务广播【大全】
  2. Python跨文件全局变量的方法
  3. 计算机视觉实习岗面试准备(二.深度学习)
  4. 在Debian 上安装php zip扩展
  5. java中junit_【Java】Junit快速入门
  6. DotNetAnywhere:可供选择的 .NET 运行时
  7. yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
  8. 《dp补卡——完全背包问题》
  9. python项目构建_通过构建4个项目来学习Python网络
  10. 深度学习修炼(二)——数据集的加载
  11. 存储过程双层循环_别出心裁,为锂金属负极贴上“双层保护膜”!
  12. SpringBoot设置外置tomcat
  13. 44. 容器的成员函数优先于同名的算法
  14. Atitit.jsou html转换纯文本 java c# php
  15. 手机远程控制电脑方法 手机远程控制电脑软件使用教程
  16. python绘制三维动态柱状图-使用pyecharts模块
  17. spring默认redis连接库lettuce性能优化,突破性能天花板,获得官方建议方式2倍吞吐量
  18. 【回炉重造】—— 异常
  19. 2017-07-07 2,3,5,7倍数
  20. esayExcel 获取值 null 去除excel中换行 回车 水平制表符

热门文章

  1. 决不轻言放弃 王雪红全力打造威盛王国
  2. 5 . 1 . 1 创建独一无二的包名
  3. php数字两位小数_PHP保留两位小数的几种方法【转】
  4. java面试题-多态
  5. 内存气球 linux,【官方推荐】Linux环境下安装EduSoho - 在线学习网络课程平台_课程内容平台_EduSoho官方教程 - 气球鱼学院...
  6. ggplot2作图详解3:映射(mapping)
  7. java文件下载中Content-disposition的定义
  8. 干货 | 广告系统架构解密
  9. HBase Canary
  10. 华为用户级别切换认证配置举例