`
chengyu2099
  • 浏览: 468767 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MYSQL的递归和oracle的递归查询

    博客分类:
  • SQL
阅读更多
select p.productid,p.productnamecn level from product p start with parentid = 0
connect by prior p.productid = p.parentid;
----------------------------------------------------------


CREATE FUNCTION getChildLst(rootId INT)
  RETURNS varchar(1000)
  BEGIN
  DECLARE sTemp varchar(1000);
  DECLARE sTempChd varchar(1000);
  SET sTemp = '$';
  SET sTempChd =cast(rootId as CHAR);
  WHILE sTempChd is not null DO
  SET sTemp = concat(sTemp,',',sTempChd);
  SELECT group_concat(productid) INTO sTempChd FROM product where
  FIND_IN_SET(parentid,sTempChd)>0;
  END WHILE;
  RETURN sTemp;
  END;
===============================================================
mysql> CREATE FUNCTION getChildLst(rootId INT)
  RETURNS varchar(1000)
  BEGIN
  DECLARE sTemp varchar(1000);
  DECLARE sTempChd varchar(1000);
  SET sTemp = '$';
  SET sTempChd =cast(rootId as CHAR);
  WHILE sTempChd is not null DO
  SET sTemp = concat(sTemp,',',sTempChd);
  SELECT group_concat(productid) INTO sTempChd FROM product where
  FIND_IN_SET(parentid,sTempChd)>0;
  END WHILE;
  RETURN sTemp;
  END;
Query OK, 0 rows affected

mysql> delimiter;
mysql> select getChildLst(1);
+-------------------+
| getChildLst(1)    |
+-------------------+
| $,1,2,3,4,5,6,7,8 |
+-------------------+
1 row in set

mysql> select getChildLst(0
);
+---------------------+
| getChildLst(0)      |
+---------------------+
| $,0,1,2,3,4,5,6,7,8 |
+---------------------+
1 row in set
mysql> select menu_id,menu_name,parent_id,link_url,sort_id,is_valid from meet_menu where find_in_set(menu_id,getChildLst(0))and menu_id in(1,2,3,4,5,6,7,8,10) and is_valid = 1 order by sort_id;
+---------+--------------+-----------+----------------------------+---------+----------+
| menu_id | menu_name    | parent_id | link_url                   | sort_id | is_valid |
+---------+--------------+-----------+----------------------------+---------+----------+
|       1 | 业务管理     |         0 |                            |       1 |        1 |
|       2 | 预警管理     |         1 | /pages/common/pageTest.jsp |       2 |        1 |
|       3 | 基础信息管理 |         0 |                            |       3 |        1 |
|       4 | 用户信息     |         3 | /manage/kehu.jsp           |       4 |        1 |
|       5 | 网络信息     |         3 | NULL                       |       5 |        1 |
|       6 | 用户管理     |         3 | NULL                       |       6 |        1 |
|       7 | 客户管理     |         3 | NULL                       |       7 |        1 |
|       8 | 网络管理     |         3 | NULL                       |       8 |        1 |
+---------+--------------+-----------+----------------------------+---------+----------+
8 rows in set
mysql> select menu_id,menu_name,parent_id,link_url,sort_id,is_valid from meet_menu where find_in_set(menu_id,getChildLst(3
))and menu_id in(1,2,3,4,5,6,7,8,10) and menu_id not in(1) and is_valid = 1 order by sort_id;
+---------+--------------+-----------+------------------+---------+----------+
| menu_id | menu_name    | parent_id | link_url         | sort_id | is_valid |
+---------+--------------+-----------+------------------+---------+----------+
|       3 | 基础信息管理 |         0 |                  |       3 |        1 |
|       4 | 用户信息     |         3 | /manage/kehu.jsp |       4 |        1 |
|       5 | 网络信息     |         3 | NULL             |       5 |        1 |
|       6 | 用户管理     |         3 | NULL             |       6 |        1 |
|       7 | 客户管理     |         3 | NULL             |       7 |        1 |
|       8 | 网络管理     |         3 | NULL             |       8 |        1 |
+---------+--------------+-----------+------------------+---------+----------+
6 rows in set
分享到:
评论

相关推荐

    递归查询菜单树,支持mysql,oracle

    这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...

    MySQL递归查询

    MySQL 递归查询是指在 MySQL 中实现类似 Oracle Hierarchical Queries 的功能,用于查询树形结构中的所有子节点。由于 MySQL 目前还没有内置的递归查询功能,因此需要使用其他方法来实现。 第一种方法:使用函数来...

    MySQL多种递归查询方法.docx

    虽然MySQL没有提供类似于Oracle的内置递归查询功能,但通过自定义函数、存储过程等手段,依然可以有效地实现递归查询的需求。 #### 三、其他MySQL相关知识点 除了递归查询之外,文章还提到了以下几个知识点: ###...

    在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现.pdf

    ORACLE、MSSQL(Microsoft SQL Server)、MYSQL是三大主流数据库系统,它们各自提供了不同的方式来实现递归查询。 首先,我们来看ORACLE数据库中的递归查询。ORACLE通过CONNECT BY子句来实现递归查询。CONNECT BY...

    mysql 递归

    用mysql实现oracle递归,通过with as 来实现

    数据库设计之递归树查询

    本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...

    Oracle start with.connect by prior子句实现递归查询

    ### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定功能上,如递归查询,与Oracle和SQL Server等商业数据库相比,存在一定的局限性。在MySQL中,没有内置的递归查询语句,通常需要借助存储过程或存储函数...

    Mysql树形递归查询的实现方法

    为了在MySQL中实现类似的查询,通常需要依赖自定义函数和存储过程,或者使用层次遍历的非递归方法,例如使用`JOIN`操作和`BREADTH-FIRST SEARCH`或`DEPTH-FIRST SEARCH`算法。 一种常见的MySQL实现方式是使用自定义...

    sql_函数实现三种父子递归

    在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子...掌握这些技术能够帮助我们在数据库设计和查询中更加高效。

    SQL语句 递归

    在Oracle中,递归查询主要通过`START WITH`和`CONNECT BY PRIOR`子句实现。 ### 二、递归查询的基本语法 递归查询的基本语法如下: ```sql SELECT column_name(s) FROM table_name START WITH condition CONNECT ...

    Mysql+Oracle函数文档

    除了这些基础函数,MySQL 和 Oracle 还支持大量的高级特性,例如窗口函数、递归查询、正则表达式等。在实际应用中,开发者可以根据需求选择合适的数据库系统,并熟练运用其内置函数提高数据处理效率。 总之,掌握 ...

    多级数据-Mysql中的递归层次查询(父子查询).doc

    Oracle 中有 Hierarchical Queries 可以通过 CONNECT BY 来查询,但是,在 MySQL 中还没有对应的函数。为了解决这个问题,我们可以使用自定义函数来实现递归层次查询。 首先,我们需要创建一个名为 `treenodes` 的...

    dbmove_sql语句转化.zip_MYSQL_dbmove_oracle

    Oracle的CONNECT BY用于构建层次查询,而在MySQL中可能需要递归的用户定义变量或JOIN操作。子查询在两个系统中语法也略有不同。 7. **事务控制**: Oracle和MySQL都支持事务,但语法上有一些差异。如Oracle使用...

    全国行政区域表,支持mysql和oracle2个版本

    - 数据库索引的优化对于查询性能至关重要,尤其是在涉及大量地域查询的应用中,对`id`和`code`字段建立唯一索引可以加快查找速度。 5. **应用实例**: - 地理信息系统(GIS):在地图应用中,行政区域代码可以...

    Oracle MySQL SQL编程最佳练手指南

    文档中还可能涉及到其他高级SQL功能和技巧,比如公用表表达式(CTE)、递归查询、存储过程和函数、触发器等。这些内容对于数据库开发者来说是需要掌握的重要知识点,它们可以帮助开发者编写出更加高效、可维护和可...

    mysql安装包mysql5.0

    7. **增强的SQL语法**:包括窗口函数、递归查询(通过WITH语句)等,使得SQL查询更加强大和灵活。 8. **安全性和权限管理**:MySQL 5.0改进了用户权限系统,允许更精细的控制,如GRANT和REVOKE语句,以确保数据安全...

    Oracle递归查询start with connect by prior的用法

    在Oracle中,`START WITH` 和 `CONNECT BY` 是进行递归查询的关键字,它们允许我们从一个特定的根节点出发,沿着预定义的关系链接遍历整个树形结构。本文将深入探讨这两个关键字的用法,并通过实例来说明其在实际...

Global site tag (gtag.js) - Google Analytics