﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-极限编程员-随笔分类-数据库</title><link>http://www.blogjava.net/feng0801/category/54454.html</link><description>学习交流平台</description><language>zh-cn</language><lastBuildDate>Thu, 12 Mar 2015 06:11:57 GMT</lastBuildDate><pubDate>Thu, 12 Mar 2015 06:11:57 GMT</pubDate><ttl>60</ttl><item><title>ORACLE级联查询</title><link>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html</link><dc:creator>冯威威</dc:creator><author>冯威威</author><pubDate>Thu, 12 Mar 2015 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html</guid><wfw:comment>http://www.blogjava.net/feng0801/comments/423398.html</wfw:comment><comments>http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/feng0801/comments/commentRss/423398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feng0801/services/trackbacks/423398.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content">
<div><font size="4">在ORACLE 数据库中有一种方法可以实现级联查询<br />select *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //要查询的字段<br />from table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //具有子接点ID与父接点ID的表&nbsp; <br />start with selfid=id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //给定一个startid(字段名为子接点ID，及开始的ID号)<br />connect by prior selfid=parentid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //联接条件为子接点等于父接点，不能反<br /><br />这个SQL主要用于菜单的级联查询，给一个父接点可以查出所有的子接点。及子接点的子接点，一查到底，很实用。不过呢这个程序只能在oracle里面用，我目前还不知道在其它数据库里是怎么调用的。等我找到了，再贴出来与大家分享。</font></div>
<div><font size="4"></font></div>
<div><font size="4">这个程序，估计好多人看不明白，其实放了这么久我也一时没看明白，重新测了一下，补充说明一下，不然我下次又看不懂了。</font></div>
<div><font size="4"></font></div>
<div><font size="4">以一个windows系统的菜单为例。我那一个这样的表menu。</font></div>
<div><font size="4">说明：</font></div>
<div><font size="4">mid:菜单的ID号</font></div>
<div><font size="4">mname：菜单名称</font></div>
<div><font size="4">mpid：菜单的</font></div>
<div><font size="4">quickey：快捷键</font></div>
<div><font size="4">validate:权限表（存放userid,或者角色id）</font></div>
<div>
<table border="1" cellspacing="1" summary="" cellpadding="1" width="200">
<tbody>
<tr>
<td>mid</td>
<td>mname</td>
<td>mpid</td>
<td>quickey</td>
<td>validate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td></tr>
<tr>
<td>1</td>
<td>文件</td>
<td>&nbsp;</td>
<td>ctrl+f</td>
<td>1，2，3，4，11，23，45</td></tr>
<tr>
<td>2</td>
<td>编辑</td>
<td>&nbsp;</td>
<td>ctrl+e</td>
<td>&nbsp;</td></tr>
<tr>
<td>3</td>
<td>新建</td>
<td>1</td>
<td>alt+w</td>
<td>&nbsp;</td></tr>
<tr>
<td>4</td>
<td>文件夹</td>
<td>3</td>
<td>&nbsp;</td>
<td>
<p>&nbsp;</p></td></tr></tbody></table></div>
<div>如果我想知道在&#8220;文件&#8221;菜单下有那些子菜单的话。我就可以这样用这个SQL程序：</div>
<div>select * from menu</div>
<div>start with mid=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div>connect by prior mid=mpid;</div>
<div>这样就可以把&nbsp;&#8220;文件&#8221;里的子菜单全部列出来了。当然实际应用不会这么简单，如附加其实条件，尤其是权限管理，这时根据你的系统要求，是对个个验证，还是对角色验证，把这些人的ID放在validate这个字段里，组成一个字符串，N个ID用逗号隔开，（注意，在往数据库保存时要注意对字符串处理一下，截取掉最后一个逗号这样可以节省很多麻烦）</div>
<div>select * from menu</div>
<div>where validate in(&#8230;&#8230;)</div>
<div>and mid in(</div>
<div>
<div>&nbsp;&nbsp; select mid from menu&nbsp; //这里不能用*号了。</div>
<div>&nbsp;&nbsp; start with mid=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp; connect by prior mid=mpid;</div></div>
<div>)</div>
<div></div>
<div></div>
<div>最后再补充一点关于随机查询的代码</div>
<div>select * from user order by sys_guid()</div></div><img src ="http://www.blogjava.net/feng0801/aggbug/423398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feng0801/" target="_blank">冯威威</a> 2015-03-12 12:04 <a href="http://www.blogjava.net/feng0801/archive/2015/03/12/423398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>