新加坡之旅

會親人的鯉魚

新加坡之旅

新加坡之旅

市場一角

新加坡之旅

新加坡之旅

Jurong鳥園

新加坡之旅

新加坡之旅

地標-Merlion

新加坡之旅

新加坡之旅

路人

新加坡之旅

新加坡之旅

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

新加坡之旅

[Oracle]遞迴抓資料Recursively select

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

假設有這麼一個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

回應文章




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

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word