2016-01-25 46 views
2

在Oracle 12c中,以下查詢可以工作,但不在Oracle 11g中,因爲二級子查詢無法從主查詢中看到字段。
如何重寫查詢以在Oracle 11中工作呢?Oracle - 二級子查詢無法從主查詢中看到字段

SELECT lvl, 
     unique_code, 
     (
      SELECT unique_code 
      FROM  (
         SELECT p.unique_code 
         FROM  tree p 
         WHERE p.lvl = t.lvl - 1 
          AND p.unique_code < t.unique_code 
         ORDER BY p.unique_code DESC 
        ) 
      WHERE ROWNUM = 1 
     ) AS parent_unique_code 
FROM  tree t  

樹包含行如下:
(請不要依靠的唯一代碼的格式/結構,這在現實中是比較複雜)

lvl   unique_code 
----------------------- 
1   A 
2   A/X 
2   A/Y 
3   A/Y/T 
2   A/Z 
1   B 
2   B/X 

預期結果如下:

lvl   unique_code parent_unique_code 
-------------------------------------------- 
1   A      
2   A/X   A 
2   A/Y   A 
3   A/Y/T   A/Y 
2   A/Z   A 
1   B    
2   B/X   B 

謝謝

+0

做一個LEFT JOIN呢? – jarlh

回答

2

也許您只需要一個max在嵌套查詢:

SELECT lvl, 
     unique_code, 
     (
      SELECT max(p.unique_code) 
         FROM  tree p 
         WHERE p.lvl = t.lvl - 1 
          AND p.unique_code < t.unique_code 
     ) AS parent_unique_code FROM  tree t 
+0

哦,這樣一個簡單的解決方案。我把自己挖進了這個和其他相關的問題,我無法從樹上看到森林:)謝謝 – Peti