SQL查询:需要帮助
我需要sql查询方面的帮助,我尝试通过创建以下简单示例来复制我的实际问题: 父表:SQL查询:需要帮助,sql,sql-server-2008,Sql,Sql Server 2008,我需要sql查询方面的帮助,我尝试通过创建以下简单示例来复制我的实际问题: 父表: id name parent_id 1 parent1 null 2 parent2 1 3 parent3 1 4 parent4 3 5 parent5 3 6 parent6 5 7 parent7 5 亲属表: id name parent_id 1 relative1 2 2
id name parent_id
1 parent1 null
2 parent2 1
3 parent3 1
4 parent4 3
5 parent5 3
6 parent6 5
7 parent7 5
亲属表:
id name parent_id
1 relative1 2
2 relative2 3
3 relative3 4
4 relative4 5
5 relative5 7
Parents表有一个父表列表,其中也有父表本身。
“亲属”表中有一个带有父项id列的亲属列表
如何查找parent3的所有亲属,包括parent3的所有“desendants”,即查询应从亲属表返回以下内容:
id name parent_id
1 relative1 2
2 relative2 3
3 relative3 4
4 relative4 5
5 relative5 7
relative2(因为父id为3)
relative3(因为父id为4,其父id为3)
relative4(因为父id为5,其父id为3)
relative5(因为父id为7,其父id为5,其父id为3)
我正在使用SQLServer2008。
希望这是有意义的,谢谢你的帮助。试试这个
;WITH CTE
AS
(
SELECT [id], [name] FROM Parents WHERE [name] = 'parent3'
UNION ALL
SELECT T1.[id], T1.[name] FROM CTE c
INNER JOIN Parents T1 ON c.[id] = T1.[parent_id]
)
SELECT * FROM Relatives
WHERE [parent_id] IN (SELECT [id] FROM CTE)
这是递归的常见情况。你应该可以在谷歌上找到很多类似的例子。提示:了解有关递归和CTE的更多信息,您将能够击倒它。如果您仍然有任何问题,请创建一个sqlfiddle并在此处发布您的问题。完美的示例,现在我正在尝试理解它,是否正确:第一次选择从Parents获得id=3和name=parent3。第二个select语句从Parent获取id和name,其中Parent_id=3,这给了我第4行和第5行的id和name。这是我有点不确定的部分,接下来会发生什么;第二个结果集是否“替换”第一个结果集,然后再次运行第二个选择,从id为4或5的父级查找数据。然后,使用每个连续结果集中的id再次运行第二个select。它将继续,直到select不返回任何值。