數據庫環境:SQL SERVER 2005
如題,現有bus表數據如下,dstart是起點,dend是終點,distance是兩地的距離。
求從A地出發到各個地方的距離。
有經驗的人一看,就知道題目關于樹形查詢的。SQL%20SERVER%202005數據庫沒有提供樹形查詢相關的函數,
因此,可以通過CTE遞歸實現。
題目比較簡單,就不寫什么分析思路了,直接看代碼實現。
1.建表,導入測試數據
CREATE TABLE bus ( dstart VARCHAR(4) , dend VARCHAR(4) , distance INT );INSERT INTO busVALUES ( 'A', 'B', 120 );INSERT INTO busVALUES ( 'B', 'C', 200 );INSERT INTO busVALUES ( 'A', 'D', 150 );INSERT INTO busVALUES ( 'D', 'M', 300 );INSERT INTO busVALUES ( 'C', 'E', 180 );INSERT INTO busVALUES ( 'F', 'M', 260 );View Code
2.實現
WITH x0 ( dstart, dend, way, distance ) AS ( SELECT dstart , dend , CONVERT(VARCHAR (20), dstart + '-' + dend) AS way , distance FROM bus WHERE dstart = 'A' UNION ALL SELECT bus .dstart , bus.dend , CONVERT(VARCHAR (20), x0. way + '-' + bus .dend) AS way ,--路徑 bus.distance + x0.distance AS distance --距離 FROM bus , x0 WHERE bus .dstart = x0 .dend ) SELECT way , distance FROM x0View Code
3.效果
看到這題目,剛好做下練手,并分享給大家。大家若有更好的實現方式,歡迎分享,一起學習。
新聞熱點
疑難解答