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

获取数据库所有表名,表的所有列名 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递归查询所遇到的程序开发问题。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Spring Boot App中集成H2数据库

你好朋友&#xff0c; 在本教程中&#xff0c;我们将尝试探索如何在Spring Boot应用程序中与H2数据库集成。 在进行检查之前&#xff0c;让我们了解有关H2数据库的一些基础知识&#xff0c;如下所述&#xff0c;然后我们将讨论H2数据库与Spring Boot的集成。 什么是H2数据库…

python在路径里添加变量_想学Python?那就先从头开始吧!

作为人工智能和大数据时代最具竞争力的 Python 语言&#xff0c;越来越多的出现在各大编程热搜排行榜上。首先你要了解什么是python了解Python语言Python是一种解释型, 面向对象, 动态数据类型的高级程序设计语言.Python由Guido van Rossum&#xff08;荷兰&#xff09; 于1989…

php生成16位不重复随机码,PHP n个不重复的随机数生成代码

复制代码代码如下://range是将1到100列成一个数组$numbersrange(1,100);//shuffle将数组顺序随即打乱shuffle($numbers);//array_slice取该数组中的某一段$no6;$resultarray_slice($numbers,0,$no);for($i0;$iecho$result[$i]."";}print_r($result);?>复制代码代…

ant 走马灯面板指示显示不出来_触摸屏报警信息显示设置方法

人机界面(HMI)是自动化设备中非常常用的器件&#xff0c;用于替代操作面板上的实体按钮或者显示指示。人机界面的适用极大的减小了设备操作面板的尺寸&#xff0c;提升了设备的整体美观度。随着自动化设备的自动化程度的提高&#xff0c;也对设备的报警信息提出了更高的要求。如…

oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED

Oracle BBED使用&#xff0c;四步快速启动Oracle BBED&#xff0c;环境&#xff1a;Oracle 10g RHEL 5.8&#xff0c;介绍&#xff1a;BBED全称为数据块浏览和编辑。用于对Oracle blo环境&#xff1a;Oracle 10g RHEL 5.8介绍&#xff1a;BBED全称为数据块浏览和编辑。用于对Or…

python打包加版本信息_使用pyi-set_version为PyInstaller打包出来的程序附加版本信息...

本文将讲述如何使用 pyi-grab_version获取版本信息的模板文件&#xff0c;以及使用 pyi-set_version为打包好的程序附加版本信息。当然了&#xff0c;在开始前&#xff0c;需要你已经安装好了 PyInstaller 这个工具。如果已经安装&#xff0c;你可以在 Python 的安装目录&#…

linux读取.data文件,[20121227]v$datafile访问是从数据文件获取信息吗.txt

[20121227]v$datafile访问是从数据文件获取信息吗.txt记得以前开始学习oracle的时候,被问及访问v$datafile从哪里获取信息,当时想都没想,从数据文件.虽然当时对方并没有告诉答案,显然认为水平不再同一档次上.直到有一次看一篇blog:SELECT controlfile "SCN location"…

java 常见错误_Java常见错误的十大列表(前100名!)

java 常见错误前10名名单非常受欢迎&#xff0c;有趣且内容丰富。 但是有很多&#xff01; 如何选择合适的&#xff1f; 这是一个元前10名列表&#xff0c;可帮助您找到前10名的前10名列表。 在更令人讨厌的笔记上&#xff1a; SELECT TOP 10 mistake FROM source1 UNION ALL …

dll侧加载_win7系统开机提示xxxdll模块已加载但找不到入口点的解决方法

很多小伙伴都遇到过win7系统开机提示xxxdll模块已加载但找不到入口点的困惑吧&#xff0c;一些朋友看过网上零散的win7系统开机提示xxxdll模块已加载但找不到入口点的处理方法&#xff0c;并没有完完全全明白win7系统开机提示xxxdll模块已加载但找不到入口点是如何解决的&#…

linux md5加密文件,Linux下对字符串进行MD5加密

深入学习golang&lpar;1&rpar;—数组与切片数据(array)与切片(slice) 数组声明: ArrayType "[" ArrayLength "]" ElementType . 例如: va ...使用apt-fast 来加速你的Ubuntu 的apt使用apt-fast 来加速你的Ubuntu 的apt sudo add-apt-repository …

JDK 12:实际中的切换语句/表达式

我的上一篇文章“ 玩JDK 12的Switch表达式 ”讨论了如何使用JDK 12 Early Access Builds尝试JEP 325 switch 表达式和语句&#xff0c;并提供了一个简单的示例。 这篇文章使用相同的JDK 12 Early Access Build 10来演示switch表达式和增强的switch语句的不同功能。 我在博客文…

broker可以禁用吗 time_Win8.1系统Runtime Broker是什么进程?可以禁用吗?

我们知道电脑一开启就有很多进程了&#xff0c;其中有一个Runtime Broker是大家比较疑惑的&#xff0c;很多人会问Win8.1系统Runtime Broker是什么进程&#xff1f;可以禁用吗&#xff1f;带着这两个问题&#xff0c;小编现在就来为大家讲解一下。一、RuntimeBroker进程介绍Run…

2. linux的日志文件在哪个目录,位于/var/log目录下的20个Linux日志文件

如果你多数时间都在使用Linux系统&#xff0c;那么你有必要知道系统的日志文件位于哪里&#xff0c;以及每个日志文件是关于哪些内容的。在系统正常的时候学习理解各种日志文件的内容&#xff0c;有助于在遇到紧急情况时通过日志文件定位问题所在。/etc/rsyslog.conf文件决定了…

linux内核4.4和4.5,[图]Linux Kernel 4.5系列第4个维护版本发布

Greg Kroah-Hartman表示&#xff1a;“我今天宣布了Linux 4.5.4内核&#xff0c;所有Linux 4.5内核系列用户必须尽快升级。已经升级的4.5.y git tree能够在git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.5.y中获取&#xff0c;也能通过访问h…

python字符串下标截取_python 用下标截取字符串的实例

python 用下标截取字符串的实例运行环境&#xff1a; win7 64位python 2.7pycharmpython 源码如下# -*- coding: utf-8 -*-str 0123456789print(str[0:3])print(str[0:-1])print(str[-1])print(str[2:5])print(str[6:-1])print(str[6:])运行效果如下&#xff1a;0120123456789…

linux正则表达式脚本实例,PowerShell中正则表达式使用例子

本文介绍PowerShell中正则表达式的使用&#xff0c;PowerShell的正则表达式与微软其它语言的正则表达式是一样的&#xff0c;使用非常方便。正则表达式本身是怎么回事&#xff0c;本文不做讨论&#xff0c;反正PowerShell还是用的微软的那一套正则表达式规则&#xff0c;学VB、…

天津python招聘信息网_【天津-滨海新区Python招聘_最新热搜天津-滨海新区Python人才招聘信息】-前程无忧...

学历要求&#xff1a;硕士|工作经验&#xff1a;3-4年|公司性质&#xff1a;上市公司|公司规模&#xff1a;150-500人专业&#xff1a;计算机、自动化、软件工程、图形图像学或相关专业 语言&#xff1a;c c c# java 数据库 算法 工作经验&#xff1a;3年以上 岗位专业能力&…

前端---初始常用的 html 标签

1. 常用的 html 标签 <!-- 1、成对出现的标签&#xff1a;--><h1>h1标题</h1> <div>这是一个div标签</div> <p>这个一个段落标签</p><!-- 2、单个出现的标签&#xff1a; --> <br> <img src"images/pic.jpg&qu…

linux开机自动启动开机日志,设置linux开机自动运行脚本

实现目标&#xff1a;在Linux启动时&#xff0c;自动运行位于普通用户test1根目录下的脚本程序test.py&#xff0c;该程序会在每次执行时自动向本地日志文件追加一条记录&#xff0c;源码如下&#xff1a;from datetime import datetimenow datetime.now()f open(test.log, a…

java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型

java自定义方法参数注解我认为构造函数和方法中冗长的参数列表是Java开发中的另一个“ 危险信号 ”&#xff0c;就逻辑和功能而言&#xff0c;它们不一定是“错误的”&#xff0c;但通常暗示当前或将来出现错误的可能性很高。 在一小部分帖子中&#xff0c;我介绍了一些可用于减…