Teradata递归SQL找到给定子桌的父母的父母



我已经安装了teradata express,并为teradata的公开可用数据库加载了名为'Finance'的数据库。

它使用PK-FK具有一些亲子关系。

我的要求是找出所有父母,授予给定孩子的父母。

我使用了DBC.All_RI_Parents元数据表并写了递归SQL来找出同样的东西,但它没有给父母的父母和给定孩子的伟大父母。

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 

最新更新