多級分類的級聯查詢sql


分類是在一般系統最常見的信息組織方式,有單級的分類,二級的分類,還有無限制級的分類。

當然我們給博客貼上分類的時候只要join下就可以找到分類的名稱。

但是我們在做導航或者選擇分類的時候往往涉及到分類的級聯查詢。下面就是說如何用sql查詢這樣的分類信息。

-- 建立分類表 
CREATE TABLE t_category
(
	ID INT IDENTITY(1,1) PRIMARY KEY,
	Name VARCHAR(40) NOT NULL,
	ParentID INT DEFAULT(-1)
)

 

-- 插入一些測試數據 
INSERT INTO t_category(name) VALUES('計算機類')
INSERT INTO t_category(name) VALUES('吃的類')
INSERT INTO t_category(name, parentid) VALUES('linux', 1)
INSERT INTO t_category(name, parentid) VALUES('python', 1)
INSERT INTO t_category(name, parentid) VALUES('oracle', 1)
INSERT INTO t_category(name, parentid) VALUES('水果', 2)
INSERT INTO t_category(name, parentid) VALUES('主食', 2)
INSERT INTO t_category(name, parentid) VALUES('米飯', 7)
INSERT INTO t_category(name, parentid) VALUES('面食', 7)
INSERT INTO t_category(name, parentid) VALUES('django', 4)
INSERT INTO t_category(name, parentid) VALUES('tornado', 4)

  

-- 問題一:如何檢索一個分類的路線 即:父->子->子->子 獲得這樣一個路徑
-- 查詢django分類的路徑 結果應該為計算機類->python->django 

WITH ctetable(id,name,pid) as (
	SELECT ID,name, parentid FROM t_category WHERE ID = 10
	UNION ALL 
	SELECT p2.id, p2.name, parentid FROM ctetable JOIN t_category p2 ON p2.id =ctetable.pid 
)
SELECT * FROM ctetable ORDER BY ID

  

-- 輸出結果 
1, '計算機類', -1
4, 'python', 1
10, 'django', 4

  

主要是應用了sql2005的common table expression特性。為我們提供了方便的查詢方式。在cte表中可以自應用

參考地址:http://msdn.microsoft.com/en-us/library/ms175972(v=sql.90).aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM