新加坡之旅

路人

新加坡之旅

新加坡之旅

Jurong鳥園

新加坡之旅

新加坡之旅

市場一角

新加坡之旅

新加坡之旅

公車上的小朋友,回頭偷看我在「偷拍」

新加坡之旅

新加坡之旅

地標-Merlion

新加坡之旅

新加坡之旅

會親人的鯉魚

新加坡之旅

[Oracle]遞迴抓資料Recursively select

2009-11-27 by Blave Huang | 回應(0) | 348次閱讀

假設有這麼一個Table:

ID NAME PARENT_ID
1 行政院 0
2 交通部 1
3 教育部 1
4 中等教育司 3
5 高等教育司 3
6 一科 5

1. 給定(3, 教育部)後,要怎麼知道:

教育部/中等教育司
教育部/高等教育司/一科

這些路徑呢?

2. 給定(6, 一科, 5)之後,要怎麼知道最上層是行政院呢?
(也就是 一科/高等教育司/教育部/行政院 這條路徑)

如果用程式去跑迴圈,並不是最聰明的解法;以下是使用CONNECT BY的SQL語法。

針對第一個問題,可以這麼寫:

SELECT LEVEL, id, name, parent_id, SYS_CONNECT_BY_PATH(name, '/')
FROM t
START WITH ID = 3
CONNECT BY PRIOR id = parent_id

 

而第二個問題,只要反著寫即可:

SELECT LEVEL, id, name, parent_id, SYS_CONNECT_BY_PATH(name, '/')
FROM t
START WITH ID = 6
CONNECT BY PRIOR parent_id = id

回應文章




  • :em01:
  • :em02:
  • :em03:
  • :em04:
  • :em05:
  • :em06:
  • :em07:
  • :em08:
  • :em09:
  • :em10:
  • :em11:
  • :em12:
  • :em13:
  • :em14:
  • :em15:
  • :em16:
  • :em17:
  • :em18:
  • :em19:
  • :em20:
  • :em21:
  • :em22:
  • :em23:
  • :em24:
  • :em25:
  • :em26:
  • :em27:
  • :em28:
  • :em29:
  • :em30:
  • :em31:
  • :em32:
  • :em33:
  • :em34:
  • :em35:
  • :em36:
  • :em37:
  • :em38:
  • :em39:
  • :em40:
  • :em41:
  • :em42:
  • :em43:
  • :em44:
  • :em45:
  • :em46:
  • :em47:
  • :em48:
  • :em49:
  • :em50:
  • :em51:
  • :em52:
  • :em53:
  • :em54:
  • :em55:
  • :em56:
  • :em57:
  • :em58:
  • :em59:
  • :em60:
  • :em61:
  • :em62:
  • :em63:
  • :em64:
  • :em65:
  • :em66:
  • :em67:
  • :em68:
  • :em69:
  • :em70:
  • :em71:
  • :em72:

*