DWB商品明细宽表建立之商品分类问题

2022-05-20  本文已影响0人  Eqo
商品分类的业务解读.png

在提交商品的种类的时候,一般会有三个种类 大中小 是下钻类型,
正常情况:每个商品都会提交到小类当中
非正常情况:每个商品插入的时候,大类,中类,小类都有 情况很复杂

需求查出每个商品的所属小类,中类,大类

商品分类理论和实际差距考量--sql技术实现.png image.png

商品明细宽表主要有一下组成

构建商品明细表时候,我们需要的是3类结果:商品小类、商品中类、商品大类。
因此在编写join的时候,我们需要关联3次,实际中的join情况因为分为下面3种:
==如果level=3,才会关联到level=2 ,再去关联level=1==
==如果level=2,关联到level=1,结束==
==如果level=1,结束==
结束指的是,已经到大类级别了,没有parent_id了。就是执行join,结果也是为空。
这样导致的结果是:查询出来的3级分类会形成==错位==。如:
一个商品level=2,只能查询出来中类、大类,但是根据上述join的方式,却把
中类当成了小类,大类当成了中类,把null当成了大类。
那么==在查询结果取值返回的时候,一定要进行条件判断了,使用case when语句==。避免错误。

核心代码

--商品小类 如果class1.level=3,说明这个商品第一级就是小类
    CASE class1.level WHEN 3
        THEN class1.id
        ELSE NULL
        END as min_class_id,
    CASE class1.level WHEN 3
        THEN class1.name
        ELSE NULL
        END as min_class_name,
    --商品中类  如果class1.level=2,说明这个商品第一级就是中类
    CASE WHEN class1.level=2
        THEN class1.id
        WHEN class2.level=2
        THEN class2.id
        ELSE NULL
        END as mid_class_id,
    CASE WHEN class1.level=2
        THEN class1.name
        WHEN class2.level=2
        THEN class2.name
        ELSE NULL
        END as mid_class_name,
    --商品大类  如果class1.level=1,说明这个商品第一级就是大类
    CASE WHEN class1.level=1
        THEN class1.id
        WHEN class2.level=1
        THEN class2.id
        WHEN class3.level=1
        THEN class3.id
        ELSE NULL
        END as max_class_id,
    CASE WHEN class1.level=1
        THEN class1.name
        WHEN class2.level=1
        THEN class2.name
        WHEN class3.level=1
        THEN class3.name
        ELSE NULL
        END as max_class_name,
上一篇下一篇

猜你喜欢

热点阅读