如何仅在购物车中显示带有产品的类别

时间:2013-08-17 09:03:09

标签: sql asp.net-mvc-3 postgresql tree shopping-cart

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

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

1 个答案:

答案 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)

sql fiddle demo