PostgreSQL には、Oracle の「LEVEL」のような疑似列がありますか?
そうでない場合、「LEVEL」のような列を作成するにはどうすればよいでしょうか?
12480 次
3 に答える
19
Postgres には階層クエリがありません。いいえCONNECT BY
、したがってまたいいえLEVEL
。
追加モジュール tablefunc は、connectby()
ほぼ同じ機能を提供します。見る:
または、標準の再帰 CTEと、level
再帰ごとにインクリメントされる列を使用して、同様のことを行うことができます。
Oracle でのこのクエリ:
SELECT employee_id, last_name, manager_id, LEVEL
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
.. Postgres では、次の再帰 CTE に変換できます。
WITH RECURSIVE cte AS (
SELECT employee_id, last_name, manager_id, 1 AS level
FROM employees
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, c.level + 1
FROM cte c
JOIN employees e ON e.manager_id = c.employee_id
)
SELECT *
FROM cte;
于 2014-03-25T06:46:38.830 に答える
3
Postgres でtablefunc拡張機能を有効にすると、 Connect By、Starts With、および使い慣れたレベルインジケーターを使用する機能を使用できます。構文は少し異なりますが、connect by from oracle を理解していれば、約 90 秒でこれを理解できます。Oracleシステムをpostgresシステムに変換したとき、それは素晴らしく、私のベーコンを救いました.
私は同様の質問にすべての詳細を与えました。
Stackoverflow Connect By 回答
于 2016-06-15T21:46:48.210 に答える