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 递归查询是指在 MySQL 中实现类似 Oracle Hierarchical Queries 的功能,用于查询树形结构中的所有子节点。由于 MySQL 目前还没有内置的递归查询功能,因此需要使用其他方法来实现。 第一种方法:使用函数来...
虽然MySQL没有提供类似于Oracle的内置递归查询功能,但通过自定义函数、存储过程等手段,依然可以有效地实现递归查询的需求。 #### 三、其他MySQL相关知识点 除了递归查询之外,文章还提到了以下几个知识点: ###...
ORACLE、MSSQL(Microsoft SQL Server)、MYSQL是三大主流数据库系统,它们各自提供了不同的方式来实现递归查询。 首先,我们来看ORACLE数据库中的递归查询。ORACLE通过CONNECT BY子句来实现递归查询。CONNECT BY...
用mysql实现oracle递归,通过with as 来实现
本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...
### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...
虽然MySQL在处理常规数据操作和查询方面表现出色,但在某些特定功能上,如递归查询,与Oracle和SQL Server等商业数据库相比,存在一定的局限性。在MySQL中,没有内置的递归查询语句,通常需要借助存储过程或存储函数...
为了在MySQL中实现类似的查询,通常需要依赖自定义函数和存储过程,或者使用层次遍历的非递归方法,例如使用`JOIN`操作和`BREADTH-FIRST SEARCH`或`DEPTH-FIRST SEARCH`算法。 一种常见的MySQL实现方式是使用自定义...
在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子...掌握这些技术能够帮助我们在数据库设计和查询中更加高效。
在Oracle中,递归查询主要通过`START WITH`和`CONNECT BY PRIOR`子句实现。 ### 二、递归查询的基本语法 递归查询的基本语法如下: ```sql SELECT column_name(s) FROM table_name START WITH condition CONNECT ...
除了这些基础函数,MySQL 和 Oracle 还支持大量的高级特性,例如窗口函数、递归查询、正则表达式等。在实际应用中,开发者可以根据需求选择合适的数据库系统,并熟练运用其内置函数提高数据处理效率。 总之,掌握 ...
Oracle 中有 Hierarchical Queries 可以通过 CONNECT BY 来查询,但是,在 MySQL 中还没有对应的函数。为了解决这个问题,我们可以使用自定义函数来实现递归层次查询。 首先,我们需要创建一个名为 `treenodes` 的...
Oracle的CONNECT BY用于构建层次查询,而在MySQL中可能需要递归的用户定义变量或JOIN操作。子查询在两个系统中语法也略有不同。 7. **事务控制**: Oracle和MySQL都支持事务,但语法上有一些差异。如Oracle使用...
- 数据库索引的优化对于查询性能至关重要,尤其是在涉及大量地域查询的应用中,对`id`和`code`字段建立唯一索引可以加快查找速度。 5. **应用实例**: - 地理信息系统(GIS):在地图应用中,行政区域代码可以...
文档中还可能涉及到其他高级SQL功能和技巧,比如公用表表达式(CTE)、递归查询、存储过程和函数、触发器等。这些内容对于数据库开发者来说是需要掌握的重要知识点,它们可以帮助开发者编写出更加高效、可维护和可...
7. **增强的SQL语法**:包括窗口函数、递归查询(通过WITH语句)等,使得SQL查询更加强大和灵活。 8. **安全性和权限管理**:MySQL 5.0改进了用户权限系统,允许更精细的控制,如GRANT和REVOKE语句,以确保数据安全...
在Oracle中,`START WITH` 和 `CONNECT BY` 是进行递归查询的关键字,它们允许我们从一个特定的根节点出发,沿着预定义的关系链接遍历整个树形结构。本文将深入探讨这两个关键字的用法,并通过实例来说明其在实际...