问题背景
今天碰到一个层级查询的问题,一共有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'