SQL處理多級分類,查詢結果呈樹形結構


對於多級分類常規的處理方法,很多程序員可能是用程序先讀取一級分類記錄,然后通過一級分類循環讀取下面的子分類

這樣處理的弊端是:如果數據量大,子分類很多,達到4級以上,這方法處理極端占用數據庫連接池

對性能影響很大。

 

如果用SQL下面的CTE遞歸處理的話,一次性就能把結果給查詢出來,而且性能很不錯

比用程序處理(數據量很大的情況),臨時表性能更好,更方便

with area as(
select *,id px,cast(id as nvarchar(4000)) px2 from region where parentid=0
union all
select a.*,b.px,b.px2+ltrim(a.region_id) from region a join area b on a.parentid=b.id
)select  * from area order by px,px2

 

可以查詢出結果—-所有分類及相應分類下子分類

id     title                    parentid

1      廣東省                0

2         廣州                 1

3            白雲區           2

4        深圳                  1

5     湖南省                  0

6        長沙                  5

7        株洲                  5

 

with area as(
select * from region where parentid=1
union all
select a.*  from region a join area b on a.parentid=b.id
)select  * from area

 

可以查詢出結果—-指定分類及相應分類下子分類

id     title                    parentid

1      廣東省                0

2         廣州                 1

3            白雲區           2

 

 

性能分析:

對於一個3500條地區記錄的數據表,其中有省,市,縣3級

查詢用時要1秒,視覺上感覺有點點慢,但不影響

數據量不大的分類,使用絕對無壓力


免責聲明!

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



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