我已经安装了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