0

在购物车中,产品类​​别树以嵌套集的形式定义为

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 或其他想法吗?

4

1 回答 1

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)

sql 小提琴演示

于 2013-08-17T09:29:03.127 回答