在购物车中,产品类别树以嵌套集形式定义为
create table artomlii (
artomaliik serial primary key,
treeparent integer references artomlii, -- parent or null if root node
categoryname char(50) );
树的最大深度为5。
树中的产品定义为
create table artomadu (
artomaliik integer primary key references artomlii not null,
productid char(20) primary key not null
)
在购物车主页中,使用查询
显示根类别select * from artomlii where treeparent is null
根据登录用户的不同,某些根类别可以为空,但不包含 任何子类别中的任何产品。这个自定义过滤器应用于artomadu表。
此查询还显示空的根类别。 如何解决这个问题,以便只显示其子类别中至少有一个产品的根类别?
可以使用WITH RECURSIVE或其他想法吗?
答案 0 :(得分:1)
with recursive cte as (
select a.artomaliik, a.categoryname, a.artomaliik as treeparent
from artomlii as a
where a.treeparent is null
union all
select c.artomaliik, c.categoryname, a.artomaliik as treeparent
from artomlii as a
inner join cte as c on c.treeparent = a.treeparent
)
select distinct
c.artomaliik, c.categoryname
from cte as c
where
exists (select * from artomadu as a where a.artomaliik = c.treeparent)