如何使用递归SQL查找父ID

问题描述 投票:0回答:1

我是递归领域的菜鸟,因为我理解语法,但无法将其应用于当前的问题。我正在使用 Postgre SQL。

我有一个product_id“ABC123”,它有一个父类别“FG_ACC_CA”,它本身有一个父类别“FG_ACC”,它还有一个父类别“FG”。 “FG”没有父类别。

我正在尝试使用递归查询来查找给定product_id 的最顶层父级。 这里parent_id和product_id是列,product_category和product_product是它们各自的表。

我尝试使用的语法是这样的 在此输入图片描述

这是我写的查询:


递归祖先为 ( 选择 pc.parent_id 作为临时值 来自产品_产品 pp 在 pc.id = pp.categ_id 上左加入product_category pc 其中 pp.product_id = 'ABC123'

工会

选择温度 来自祖先a 其中 a.temp != Null

选择* 来自祖先 ;


我得到的结果只是ABC123的parent_id。所以我想我在联合后删除了递归部分。

此外,在研究过程中,我遇到了多个父子示例,但它们都使用“内连接”而不是“哪里”,尽管他们用“哪里”作为递归条件解释了这个概念。不明白为什么。

sql mysql postgresql recursion recursive-query
1个回答
0
投票

在递归子句中,递归表(product_category)必须包含在查询中,并与递归结果(祖先)连接。

with recursive ancestor as (
    select pc.parent_id as temp
    from product_product pp
    left join product_category pc on pc.id = pp.categ_id
    where pp.product_id = 'ABC123'

    union all

    select pc.parent_id as temp
    from product_category pc
    left join ancestor a on a.temp = pc.id
    where a.temp is not null
)
select temp from ancestor;
© www.soinside.com 2019 - 2024. All rights reserved.