SQL树形查询,每一层都过滤筛选

参考

问题背景

今天碰到一个层级查询的问题,一共有6层,每一层都需要过滤条件...

如果一层包一层这样过滤,很明显SQL会很臃肿,这不是我想要的,怎么用简洁的方式来查询出结果呢?

解决方法

思路就是利用PATH...将每一层的查询条件拼接成PATH对应的值,进行过滤。

with tmp as (
SELECT id, parent_id, name, value, descr, level as lvl,
       LTRIM(SYS_CONNECT_BY_PATH(value, '-'), '-') AS path
   FROM cc_sys_parameter a
   START WITH a.name = 'CODE_LENGTH' and a.value = 0  -- 0-采购订单
   CONNECT BY PRIOR id = parent_id
)
select a.* from tmp b
 join cc_sys_parameter a on a.parent_id = b.id and a.name='PO_CODE_LENGTH'
where b.path = '0-5-0-6'

你可能感兴趣的:(SQL树形查询,每一层都过滤筛选)