当前位置:首页 > 生活百科

oracle递归查询语句(oracle递归查询函数)

栏目:生活百科日期:2025-02-28浏览:0

众所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL语句内使用@变量。以下是示例代码。

创建表格

CREATE TABLE `lf_ctrl_trade` (    `TRADEID` int , -- 节点ID    `nodename` varchar (60), -- 节点名称    `PARENTID` int  -- 节点父ID); 

方案一:

 SELECT TRADEID AS ID,PARENTID AS 父ID ,levels AS 父到子之间级数, paths AS 父到子路径 FROM (     SELECT TRADEID,PARENTID,     @le:= IF (PARENTID = 0 ,0,           IF( LOCATE( CONCAT('|',PARENTID,':'),@pathlevel)   &> 0  ,                        SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',PARENTID,':'),-1),'|',1) +1        ,@le+1) ) levels     , @pathlevel:= CONCAT(@pathlevel,'|',TRADEID,':', @le ,'|') pathlevel      , @pathnodes:= IF( PARENTID =0,',0',            CONCAT_WS(',',           IF( LOCATE( CONCAT('|',PARENTID,':'),@pathall) &> 0  ,                SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',PARENTID,':'),-1),'|',1)              ,@pathnodes ) ,PARENTID  ) )paths    ,@pathall:=CONCAT(@pathall,'|',TRADEID,':', @pathnodes ,'|') pathall         FROM  lf_ctrl_trade,     (SELECT @le:=0,@pathlevel:='', @pathall:='',@pathnodes:='') vv    ORDER BY  PARENTID,TRADEID    ) srcORDER BY TRADEID

方案二:

创建函数

DROP FUNCTION IF EXISTS queryChildrenTrade;CREATE FUNCTION `queryChildrenTrade` (myid INT)RETURNS VARCHAR(4000)BEGINDECLARE sTemp VARCHAR(4000);DECLARE sTempChd VARCHAR(4000); SET sTemp = '$';SET sTempChd = cast(myid as char); WHILE sTempChd is not NULL DOSET sTemp = CONCAT(sTemp,',',sTempChd);SELECT group_concat(TRADEID) INTO sTempChd FROM lf_ctrl_trade where FIND_IN_SET(PARENTID,sTempChd)&>0;END WHILE;return sTemp;END;

如何查询:

select * from lf_ctrl_trade where FIND_IN_SET(TRADEID, queryChildrenTrade(3000))

“oracle递归查询语句(oracle递归查询函数)” 的相关文章

如何做广告策划与推广(4大方面做好广告营销策划案)

一、研究客户的消费心理做营销就是研究消费者的心理,我们要知道客户想要什么?客户能从我们这里得到什么?以及阻碍客户成交的顾虑是什么?这三个问题一定要提前做好分析,...

华为交换机操作系统版本有哪些(科普华为交换机的常见类

华为网络设备:硬件、操作系统、文件系统、命令行华为产品系列(路由器):AR系列敏捷网关(AR-1500、AR2500、AR3600、AR501)ARG3系列路由...

microsoftoffice是什么软件(分享microsoftoffice产品密

MicrosoftOffice仍然是我们日常生活以及工作最常用的办公软件,甚至我们每天打开word、Excel、PowerPoint的次数比我们吃饭次数还要多,...

农村电商平台怎么做,农村大集十大畅销产品

说到电商,首先会想到淘宝,天猫,京东这些老牌电商,还有新晋得拼多多。这些综合性电商平台,有很大的流量,是个不错的选择,但做农村电商,不仅要瞄准这些大平台,还有一...

2019一个手机号能注册几个微信号码(无限免费申请的方法

我们都知道一个手机号只能注册一个微信号,而老司机们也都只有一个手机号,但是他们竟然能注册多个微信号,这是为什么呢?如果说我们用一个手机号成功注册了多个微信号,我...

mac默认播放器在哪里改(macbook默认播放器设置方法)

PC上的媒体播放器多如牛毛,有一些媒体播放器随着时间逐渐没落,有一些则如黑马一般杀入我们的电脑,以下是小编常用的一些播放器,附带一些小技巧。Windows平台:...

seo搜索引擎优化方案案例(seo成功的案例和分析)

我是做装修的,我用了3个月的时间,把我们本地行业的关键词流量垄断了3/2,可以说在行业里面做的非常牛逼了,那么今天就把我这套牛逼的SEO优化方案分享出来,大家看...

创业需要做哪些准备工作(创业前期最重要的5点准备)

现在年轻人面临着很多的选择,比如创业一族和正常上班族,该选择哪一种。而往往做了一个选择后,就会有更多的选择等着你去定位。很多的选择摆在面前,看起来似乎比无条件选...

javascript教程推荐(java零基础自学)

其实很早就知道有这么个地方,只是当时走的python+人工智能路线,就算使用python的web开发框架Django开发过不是前后端分离的网站,前端用的也是bo...

fifiaonline4怎么调游戏时间(fifa online4最强队套)

随着游戏版本的不断变动,曾经作用单一、偏向于省工资的边后卫位置,已经逐渐被赋予了越来越重要的定位。即使42211和4222阵型流行,边后卫也需要根据实际情况,适...