我有一个表 TABA(PK:NAME) 以这种方式存储 NAME,NAME_TYPE,SOURCE :
NAME NAME_TYPE SOURCE
---- --------- ------
Name1 Category S1
Name2 Category S2
Name3 Datamart
Name4 Category S1
Name5 Datamart
Name6 Datamart
Name7 Category S3
上面的注意事项:仅当 NAME_TYPE = Category 时,源才会出现在数据中。
我有另一个表 TABA_PARENT 存储 NAME,PARENT_NAME 以及基于 name_type 的 NAME 列之间的关系。Datamart 与类别的关系是一对多的。
NAME PARENT_NAME
----- -----------
Name3 Name1
Name3 Name2
Name3 Name4
Name3 Name5
Name5 Name1
Name5 Name6
Name6 Name7
我的要求是获取 TABA 的 SOURCE,其中 NAME_TYPE = Datamart(目前,TABA 中不存在)
预期输出:
SOURCE column for Name3
-----------------------
S1,S2,S3
诀窍是递归地推导出 Name3 的 SOURCE,直到它映射到 TABA_PARENT 中的类别。
在上面的例子中:
Name3 映射到 PARENT_NAME Name1,Name2,Name4,Name5。其中 3 个 (name1,Name2,Name4) 属于 name_type = Category,因此在 TABA 中可以使用不同的源 -- S1,S2 第四个 PARENT_NAME Name5 是 name_type Datamart(源信息不可用),需要进一步扩展,直到它达到 name_type = Category。
我们有 Name5 映射到 PARENT_NAME Name1,Name6 的信息。Name1 是一个类别,因此可以推断出来源。Name6 又是一个数据集市。
但是,Name6 最终映射到作为 Category 的 Name7,因此源可用——S3
如上所示,所有映射都必须递归解析,直到它们到达 name_type 类别以识别不同的源。
Expected Result: S1,S2,S3
我正在尝试是否可以使用 listagg 或类似的东西来完成(小的 pl/sql 代码也可以,但如果可能的话更喜欢单选)我很难递归地做到这一点。任何帮助将非常感激。