【问题标题】:Get all parents for a child in postgresql在postgresql中获取孩子的所有父母
【发布时间】:2019-05-02 08:44:52
【问题描述】:

我在 SQL Server 上运行成功。我的系统在 SQL Server 和 postgresql 上运行。

但是当我从 SQL Server 更改为 postgresql 时,它运行失败。

我的sql是这样的:

with name_tree as 
(
    SELECT DepartNo, ParentNo FROM Departments 
    WHERE DepartNo IN (
        SELECT DepartNo FROM BelongToDepartment 
        WHERE UserNo = 1)
   union all
   select C.DepartNo, C.ParentNo
   from Departments c
   join name_tree p on C.DepartNo = P.ParentNo  
    AND C.DepartNo<>C.ParentNo 
) 
select * from name_tree

错误是:

name_tree 不存在

如何在postgresql中获取一个孩子的所有父母

更多细节在 MSQ 服务器here

【问题讨论】:

  • SQL 标准要求RECURSIVE 关键字用于递归公用表表达式,Postgres 遵循该标准。所以你需要使用with recursive ...as documented in the manual

标签: sql postgresql common-table-expression recursive-query


【解决方案1】:

试试:

with RECURSIVE name_tree as 
(
    SELECT DepartNo, ParentNo FROM Departments 
    WHERE DepartNo IN (
        SELECT DepartNo FROM BelongToDepartment 
        WHERE UserNo = 1)
   union all
   select C.DepartNo, C.ParentNo
   from Departments c
   join name_tree p on C.DepartNo = P.ParentNo  
    AND C.DepartNo<>C.ParentNo 
) 
select * from name_tree

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-29
    • 2020-06-06
    • 2021-12-02
    • 2013-11-23
    • 2018-04-19
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多