隨筆-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 閱讀(1483) 評論(0)  編輯  收藏 所屬分類: 數據庫

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 拉孜县| 慈利县| 荣成市| 福贡县| 崇州市| 红安县| 扶余县| 峨山| 习水县| 南开区| 石城县| 西盟| 清苑县| 渑池县| 长宁县| 太仓市| 辰溪县| 大渡口区| 新营市| 应用必备| 新沂市| 夏津县| 武陟县| 白朗县| 永仁县| 梧州市| 含山县| 卓资县| 府谷县| 巴塘县| 竹溪县| 石嘴山市| 舟曲县| 衡东县| 建宁县| 蓬溪县| 耿马| 通海县| 东阳市| 浏阳市| 朝阳区|