随笔-23  评论-0  文章-5  trackbacks-0
在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()
posted on 2015-03-12 12:04 ForMeBlog 阅读(1463) 评论(0)  编辑  收藏 所属分类: 数据库

只有注册用户登录后才能发表评论。


网站导航: