45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:如何查询ORACLE级联?

如何查询ORACLE级联?

2016-08-27 19:28:06 来源:www.45fan.com 【

如何查询ORACLE级联?

在ORACLE 数据库中有一种方法可以实现级联查询
select * //要查询的字段
from table //具有子接点ID与父接点ID的表
start with selfid=id //给定一个startid(字段名为子接点ID,及开始的ID号)
connect by prior selfid=parentid //联接条件为子接点等于父接点,不能反

这个SQL主要用于菜单的级联查询,给一个父接点可以查出所有的子接点。及子接点的子接点,一查到底,很实用。不过呢这个程序只能在oracle里面用,我目前还不知道在其它数据库里是怎么调用的。等我找到了,再贴出来与大家分享。
 
这个程序,估计好多人看不明白,其实放了这么久我也一时没看明白,重新测了一下,补充说明一下,不然我下次又看不懂了。
 
以一个windows系统的菜单为例。我那一个这样的表menu。
说明:
mid:菜单的ID号
mname:菜单名称
mpid:菜单的
quickey:快捷键
validate:权限表(存放userid,或者角色id)
mid mname mpid quickey validate
1 文件   ctrl+f 1,2,3,4,11,23,45
2 编辑   ctrl+e  
3 新建 1 alt+w  
4 文件夹 3    
如果我想知道在“文件”菜单下有那些子菜单的话。我就可以这样用这个SQL程序:
select * from menu
start with mid=1
connect by prior mid=mpid;
这样就可以把“文件”里的子菜单全部列出来了。当然实际应用不会这么简单,如附加其实条件,尤其是权限管理,这时根据你的系统要求,是对个个验证,还是对角色验证,把这些人的ID放在validate这个字段里,组成一个字符串,N个ID用逗号隔开,(注意,在往数据库保存时要注意对字符串处理一下,截取掉最后一个逗号这样可以节省很多麻烦)
select * from menu
where validate in(……)
and mid in(
select mid from menu //这里不能用*号了。
start with mid=1
connect by prior mid=mpid;
)
最后再补充一点关于随机查询的代码
select * from user order by sys_guid()
 

本文地址:http://www.45fan.com/dnjc/68573.html
Tags: oracle 查询 级联
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部