1.表设计如下
2.测试数据如下
3.需求
查询某级别下面所有的子级别(假设级别最多只有3级),例如,某级别的id=1000000000,查询如下
SELECT * FROM t_commodity_type tct WHERE tct.PARENT_TYPE_ID = 1000000000UNION ALLSELECT * FROM t_commodity_type tct2 WHERE tct2.PARENT_TYPE_ID in (SELECT tct3.COMMODITY_TYPE_ID FROM t_commodity_type tct3 WHERE tct3.PARENT_TYPE_ID = 1000000000)
4.如果存在多级的话,一直union all下去
5.针对业务改善如上表设计
很明显,一个现级id、一个父级id不能方便的查询,还需要增加一个原级id。
这样,查询某个级别下面所有子级的时候,就可以挂上级别和原级id查询,这样方便些。
6.针对如上表的更新
更新某个级别下面所有的use_flag,如下的sql假设该级别为1
UPDATE t_commodity_type tct SET tct.USE_FLAG = 0, tct.UPD_USER_ID = #{userId}, tct.UPD_TIME = #{updTime} WHERE ( tct.COMMODITY_TYPE_ID = #{commodityTypeId} AND tct.COMMODITY_LEVEL = 1 ) OR ( tct.PARENT_TYPE_ID = #{commodityTypeId} AND tct.COMMODITY_LEVEL = 2 ) OR tct.COMMODITY_TYPE_ID IN ( SELECT tct3.COMMODITY_TYPE_ID FROM t_commodity_type tct3 LEFT JOIN t_commodity_type tct2 ON tct3.PARENT_TYPE_ID = tct2.COMMODITY_TYPE_ID WHERE tct3.COMMODITY_LEVEL = 3 AND tct2.PARENT_TYPE_ID = #{commodityTypeId} )