我是递归领域的菜鸟,因为我理解语法,但无法将其应用于当前的问题。我正在使用 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。所以我想我在联合后删除了递归部分。
此外,在研究过程中,我遇到了多个父子示例,但它们都使用“内连接”而不是“哪里”,尽管他们用“哪里”作为递归条件解释了这个概念。不明白为什么。
在递归子句中,递归表(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;