oracle - PostgreSQL 在 Oracle 中是否有类似 "LEVEL"的伪列?

标签 oracle postgresql connect-by hierarchical-query recursive-cte

PostgreSQL有没有像Oracle中的“LEVEL”一样的伪列?
如果不是,那我们如何创建类似于“LEVEL”的列?

最佳答案

Postgres 没有hierarchical queries .没有 CONNECT BY,因此也没有 LEVEL

附加模块 tablefunc 提供函数 connectby()几乎一样。看 mthorley answer了解详情。

或者您可以使用标准 recursive 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;

关于oracle - PostgreSQL 在 Oracle 中是否有类似 "LEVEL"的伪列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626394/

相关文章:

oracle - 将 Connect by、inner join 和 sum 与 Oracle 混合在一起

Oracle 触发器可以是另一个数据库对象的父对象吗?

sql - Oracle SQL - CASE When 任何记录的条件

mysql - TO_DATE 从 DD-MON-YY 到 YYYYMMDD

sql - 基于另一列的 PostgreSQL 序列

postgresql - heroku postgresql 推送一张表

sql - Oracle 到 Derby - ConnectBy 并从 Derby 中的等效项开始

sql - 查找其他oracle表中不存在的记录

postgresql - 在 PostgreSQL 查询中添加条件语句

sql - 计算其 parent 拥有的根的百分比