【问题标题】:Recursive query for postgresSQL parent/childpostgresQL 父/子的递归查询
【发布时间】:2019-09-17 09:14:09
【问题描述】:

就递归查询语法寻求一点帮助,当然还有结果。

正如您将看到的,我有一个包含父子类别的表(父母可以有无限的孩子​​)。查询分类字典(链接到真实分类)

我只想返回每个类别树的最后一个孩子

更新了我的代码和信息

编辑

WITH RECURSIVE cat(id) AS (
    SELECT
        *
    FROM
        category_dictionary
            LEFT JOIN category_dictionary.category ON category.id
    WHERE
        category.parent is NOT NULL
    UNION
    SELECT
        *
    FROM
        cat
            LEFT JOIN cat.category ON category.id
    WHERE
        category.parent is NOT NULL
)
SELECT
    *
FROM
    cat

表信息:

  • Category_dictionary 是参数类别上的联接类别表
  • Category 是带有 Parent 条目的主表。

样本数据:

category_dictionary 条目:

ID : name (Men) : category_id

category 条目:

category_id : name : parent (null or category_id)

因此我想要每个类别条目的所有最后一个子项,我的意思是没有子项的类别。

【问题讨论】:

  • 请添加您的错误信息和一些示例数据
  • 那些 LEFT JOIN 完全没有意义。
  • 对于 LEFT JOIN 你需要一个 ON 子句...
  • 我会尝试一些东西并更新,
  • 请给我们一些示例数据和预期输出

标签: sql postgresql recursion recursive-query


【解决方案1】:

不需要递归查询来找到最深的孩子。相反,人们会查看不是父项的条目(因此不存在其他子项)。此类条目 ID 不包含在 parent 列中。

然后您可以将此类别加入到其他表中

SELECT *
FROM category cat
  JOIN category_dictionary cat_dic ON cat.id = cat_dic.id
WHERE NOT EXISTS
 (SELECT 1 FROM category cat2
  WHERE cat2.parent = cat.id);

【讨论】:

    最近更新 更多