Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 递归CTE以查找父记录_Sql_Sql Server 2005_Recursion_Common Table Expression - Fatal编程技术网

Sql 递归CTE以查找父记录

Sql 递归CTE以查找父记录,sql,sql-server-2005,recursion,common-table-expression,Sql,Sql Server 2005,Recursion,Common Table Expression,首先,我必须承认我对sql server不是很熟悉,但我认为这是最好的方法 我有一个表tabData。它的主键被命名为idData,并且有一个自引用的FKfiData 因此fiData引用父记录,并从tabData中选择*,其中idData=fiData返回父记录的所有数据。这是简单而快速的。但是如何按照自然顺序从给定的记录中获得所有的父母呢? 假设有一个子项(idData=4)和三个父项(第一个父项是idData=3的记录): 我认为递归CTE是一种方法,但我对它的语法不太熟悉。 那么,实现

首先,我必须承认我对sql server不是很熟悉,但我认为这是最好的方法

我有一个表
tabData
。它的主键被命名为
idData
,并且有一个自引用的FK
fiData

因此fiData引用父记录,并从tabData中选择*,其中idData=fiData返回父记录的所有数据。这是简单而快速的。但是如何按照自然顺序从给定的记录中获得所有的父母呢? 假设有一个子项(idData=4)和三个父项(第一个父项是idData=3的记录):

我认为递归CTE是一种方法,但我对它的语法不太熟悉。 那么,实现返回所有家长的CTE的正确方法是什么

我尝试了以下操作,但它给出了错误的结果(3,4而不是3,2,1): (为了测试它,我为我和你创建了一个临时表)

提前感谢。

更改为:

INNER JOIN PreviousClaims parent ON parent.fiData = child.idData

给了我你想要的结果

您拥有向后连接

改变这个

INNER JOIN PreviousClaims parent ON parent.idData= child.fiData 
对此

INNER JOIN PreviousClaims parent ON parent.fiData = child.idData

谢谢,柯克·沃尔快了几秒钟。
INNER JOIN PreviousClaims parent ON parent.idData= child.fiData 
INNER JOIN PreviousClaims parent ON parent.fiData = child.idData