0

テーブル「tbl_test」が1つしかありません

以下にファイルされたテーブルがあります

tbl_test table
trx_id | proj_num  | parent_num|
1      | 14        | 0         |
2      | 14        | 1         |
3      | 14        | 2         |
4      | 14        | 0         |
5      | 14        | 3         |
6      | 15        | 0         |

私が望む結果は次のとおりです。trx_id値5がフェッチされたとき

親子関係です。それで、

trx_id -> parent_num
5      -> 3
3      -> 2
2      -> 1

つまり、出力値:

3
2
1

すべての親チェーンを取得する

私が使用したクエリ:

SELECT *  FROM ( 
    WITH RECURSIVE tree_data(project_num, task_num, parent_task_num) AS( 
    SELECT project_num, task_num, parent_task_num 
          FROM tb_task 
          WHERE project_num = 14 and task_num = 5
             UNION ALL 
             SELECT child.project_num, child.task_num, child.parent_task_num
              FROM tree_data parent Join tb_task child 
               ON parent.task_num = child.task_num AND parent.task_num = child.parent_task_num 
             ) 
          SELECT project_num, task_num, parent_task_num 
           FROM tree_data 
              ) AS tree_list ;

誰でも私を助けることができますか?

4

2 に答える 2

1

pl/pgsql でこれを行う必要はありません。SQLで直接行うことができます。検討:

WITH RECURSIVE my_tree AS (
     SELECT trx_id as id, parent_id as parent, trx_id::text as path, 1 as level
       FROM tbl_test
      WHERE trx_id = 5 -- start value
  UNION ALL
     SELECT t.trx_id, t.parent_id, p.path || ',' || t.trx_id::text, p.level + 1
       FROM my_tree p
       JOIN tbl_text t ON t.trx_id = p.parent
)
select * from my_tree;
于 2013-03-14T12:32:50.830 に答える
0

PostgresSQL を使用している場合は、WITH 句を使用してみてください。

WITH regional_sales AS (    
        SELECT region, SUM(amount) AS total_sales
         FROM orders
         GROUP BY region
         ), top_regions AS (
         SELECT region
        FROM regional_sales
        WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
        )
SELECT region,
       product,
       SUM(quantity) AS product_units,
       SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
于 2013-03-14T12:43:32.237 に答える