过滤掉没有项目的类别

时间:2015-08-08 13:34:16

标签: mysql sql

我想检索包含产品的所有类别的层次结构。

这是我的表格结构: enter image description here

类别结构将是:

Categ A
      ^--Categ B
               ^--Categ C
                        ^-- Prod 1
                        ^-- Prod 2
               ^--Categ D
      ^--Categ E
               ^--Categ F
               ^--Categ G

对于上面显示的结构,我想过滤掉分类D,分类E,分类F,分类G ,因为它们没有任何产品任何子类别有产品。

2 个答案:

答案 0 :(得分:1)

您可以迭代执行此操作。只需运行此删除,直到没有返回任何记录:

delete c
    from category c left join
         category child
         on c.id = child.parent_id
    where child.id is null and
          not exists (select 1 from category_productd cp where cp.categ_id = c.id) ;

您有分层数据结构。除了循环之外,MySQL实际上不支持这样的结构。

答案 1 :(得分:0)

为什么不用产品获取所有类别而不是删除没有产品的类别?第一件事可以通过内部联接完成:

SELECT * 
FROM category_product as a
JOIN product as b
ON a.prod_id = b.id