12

PostgreSQL には、Oracle の「LEVEL」のような疑似列がありますか?
そうでない場合、「LEVEL」のような列を作成するにはどうすればよいでしょうか?

4

3 に答える 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 ByStarts With、および使い慣れたレベルインジケーターを使用する機能を使用できます。構文は少し異なりますが、connect by from oracle を理解していれば、約 90 秒でこれを理解できます。Oracleシステムをpostgresシステムに変換したとき、それは素晴らしく、私のベーコンを救いました.

私は同様の質問にすべての詳細を与えました。
Stackoverflow Connect By 回答

于 2016-06-15T21:46:48.210 に答える