Teradata 递归 SQL 查找给定 Child table 的 Parent 的 Parent

Teradata Recursive SQL to find Parents of Parent of given Child table

我已经安装了 Teradata Express 并在其中加载了名为 'Finance' 的公开可用的 teradata 数据库。

它有一些 parent-child 使用 PK-FK 的关系。

我的要求是找出给定child的所有parents,授予parents。

我已经使用了 DBC.All_RI_Parents 元数据 table 并编写了一个递归 SQL 来找出相同的但它没有给出 parent 的 parent 和伟大的 parents of given child.

WITH RECURSIVE CTE
(indexid,
indexname,
parentdb,
parenttable,
parentkeycolumn,
childdb,
childtable,childkeycolumn,
DEPTH) AS
(
select indexid,indexname,parentdb,parenttable,parentkeycolumn,
childdb,childtable,childkeycolumn,1 AS DEPTH 
from DBC.All_RI_Parents where childdb='finance' and childtable='fin_loan'
UNION ALL
SELECT par.indexid,par.indexname,par.parentdb,par.parenttable,par.parentkeycolumn,
par.childdb,par.childtable,par.childkeycolumn ,
CTE.DEPTH + 1
FROM CTE INNER JOIN DBC.All_RI_Parents par
ON CTE.parentkeycolumn = par.childkeycolumn
and CTE.parenttable = par.childtable
and CTE.parentdb = par.childdb
)
SELECT * FROM CTE 

我已经从

下载了数据集

https://community.teradata.com/t5/Blog/Demo-databases-for-download/ba-p/85684

如果我在这里做错了,请告诉我。

我通过深入研究数据发现不应添加 CTE.parentkeycolumn = par.childkeycolumn,因为列名可能不同。删除后,它运行完美,

WITH RECURSIVE CTE
(indexid,
indexname,
parentdb,
parenttable,
parentkeycolumn,
childdb,
childtable,childkeycolumn,
DEPTH) AS
(
select indexid,indexname,parentdb,parenttable,parentkeycolumn,
childdb,childtable,childkeycolumn,1 AS DEPTH 
from DBC.All_RI_Parents where childdb='finance' and childtable='fin_loan'
UNION ALL
SELECT par.indexid,par.indexname,par.parentdb,par.parenttable,par.parentkeycolumn,
par.childdb,par.childtable,par.childkeycolumn ,
CTE.DEPTH + 1
FROM CTE INNER JOIN DBC.All_RI_Parents par
ON 
CTE.parenttable = par.childtable
and CTE.parentdb = par.childdb
)
SELECT * FROM CTE