[英]Get parent path of hierarchical data in oracle
堆棧溢出不是一個編碼站點,您應該始終包含所嘗試內容的示例。 就是說,我覺得這很有趣,我想自己嘗試一下。
這是一種完全蠻力的方法。 我從每個級別提取層次結構,然后使用listagg將它們組合在一起:
WITH
category
AS
(SELECT '100' category_id, NULL parent_id
FROM DUAL
UNION ALL
SELECT '101' category_id, '100' parent_id
FROM DUAL
UNION ALL
SELECT '102' category_id, '101' parent_id
FROM DUAL
UNION ALL
SELECT '103' category_id, '101' parent_id
FROM DUAL),
GROUPING
AS
(SELECT '200' GROUPING_ID, NULL parent_id, '101' category_id
FROM DUAL
UNION ALL
SELECT '201' GROUPING_ID, '200' parent_id, '101' category_id
FROM DUAL
UNION ALL
SELECT '202' GROUPING_ID, '201' parent_id, '101' category_id
FROM DUAL
UNION ALL
SELECT '203' GROUPING_ID, NULL parent_id, '102' category_id
FROM DUAL),
performer
AS
(SELECT '300' performer_id, '202' GROUPING_ID, '101' category_id
FROM DUAL
UNION ALL
SELECT '301' performer_id, '201' GROUPING_ID, '101' category_id
FROM DUAL
UNION ALL
SELECT '302' performer_id, '203' GROUPING_ID, '103' category_id
FROM DUAL
UNION ALL
SELECT '303' performer_id, NULL GROUPING_ID, '102' category_id
FROM DUAL),
pset (p_gid, p_parentid, p_catid)
AS
(SELECT GROUPING.GROUPING_ID, parent_id, GROUPING.category_id
FROM performer INNER JOIN GROUPING ON performer.GROUPING_ID = GROUPING.GROUPING_ID
WHERE performer_id = '300'
UNION ALL
SELECT GROUPING_ID, parent_id, category_id
FROM pset INNER JOIN GROUPING ON GROUPING_ID = p_parentid),
cset (p_catid, p_parent)
AS
(SELECT p_catid, parent_id
FROM pset INNER JOIN category ON pset.p_catid = category.category_id
UNION ALL
SELECT category_id, parent_id
FROM cset INNER JOIN category ON category_id = p_parent),
dset
AS
(SELECT p_catid
FROM cset
UNION
SELECT p_gid
FROM pset
UNION
SELECT '300'
FROM DUAL)
SELECT LISTAGG (p_catid, '->') WITHIN GROUP (ORDER BY p_catid DESC) AS performer_chain
FROM dset
答案是
PERFORMER_CHAIN
300->202->201->200->101->100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.