多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL2005使用with關鍵字解決遞歸父子關系

SQL2005使用with關鍵字解決遞歸父子關系

來源:程序員人生   發(fā)布時間:2014-05-06 11:18:53 閱讀次數:3860次

1. 引言

現實項目中經常遇到需要處理遞歸父子關系的問題,如果把層次關系分開,放在多個表里通過主外鍵關系聯接,最明顯的問題就是擴展起來不方便,對于這種情況,一般我們會創(chuàng)建一個使用自連接的表來存放數據。例如存放會員地區(qū)數據表結構可能是這樣:

列名

描述

location_id

地區(qū)編號

location_name

地區(qū)名稱

parentlocation_id

上級地區(qū)編號

或者某個部分的職員表結構可能如下所示:

列名

描述

employee_id

職員編號

employee_name

職員名稱

manager_id

職員的直接上級管理者,和employee_id進行自聯接

通過類似表結構,我們就可以通過一個表理論上管理無限級數的父/子關系,但是當我們需要將這些數據讀取出來,不論是填充到一個樹中,或是使用級聯顯示出來,需要花費一定的精力。傳統(tǒng)的做法,是做一個遞歸調用,首先連接數據庫將頂層數據(也就是parent_xxxnull的記錄)讀取出來,再對每一條數據進行遞歸訪問填充集合,這種做法需要連接數據庫多次,顯然不是較好的解決方法,那么我們能不能通過一次數據庫訪問,將數據全部讀取出來,并且為了按照父子關系形成集合,使返回的數據滿足某種格式。

2. 分析

理想情況下,如果父/子關系數據時嚴格按照關系結構添加到數據庫中,亦即首先添加某條父記錄,接著添加該父記錄的子記錄,如果子記錄還包含子記錄的話繼續(xù)添加,最終數據表中父/子關系按規(guī)則排列數據,我們就可以使用某種算法填充集合,但是正如我們所說,這是理想情況,實際情況下數據經常會發(fā)生改變,導致數據沒有規(guī)律可言,如下圖所示,這樣的話讀取數據填充集合就不太容易的。

所以我們要做的就是通過查詢使數據庫返回的數據滿足這種格式,那么我們的思路是首先查找頂層(0層)記錄,再查詢第1層記錄,接下來是第2層、第3層直到第n層。因為層數是不確定的,所以仍然需要使用遞歸訪問。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 91精品91 | 日韩久久一区二区三区 | 亚洲第二页 | 中国jizz妇女jizz妇女 | 亚洲一区二区欧美日韩 | 在线免费观看h视频 | 亚欧美| 全亚洲最大的免费影院 | 久久国产免费福利资源网站 | 性欧美欧美 | 国产激情在线观看完整流畅 | 最新国产大片高清视频 | 黑人网址| www精品视频| 亚洲欧美国产另类视频 | 极品美女一级毛片 | 欧美片xxxx| 中文字幕天天躁夜夜狠狠综合 | 日本三级中文 | 亚洲一区二区三区夜色 | 国产高清视频免费在线观看 | 免费观看欧美性一级 | 自拍偷自拍亚洲精品情侣 | 最近最新高清中文字幕6页 最近最新免费中文字幕8 | 国产欧美亚洲专区第一页 | 亚洲天堂视频在线免费观看 | xxx日本护士www| 免费一级毛片在播放视频 | 羞羞动漫免费网站 | 99热久久精品最新 | 欧美另类精品一区二区三区 | 欧美一级α片 | 亚州一级毛片 | 91亚洲在线| 亚洲国产成人久久综合一区77 | 一级做a爰片久久毛片图片 一级做a爰片欧美aaaa | 在线a视频网站 | 69国产精品 | 91伊人久久大香线蕉 | 最近韩国动漫hd免费观看 | 亚洲综合在线视频 |