递归查询以获取行的所有后代

时间:2012-10-11 11:30:40

标签: sql recursion

我有一个菜单系统,每个项目都有一个父项。所以结构是这样的

enter image description here

我想要做的是显示当前页面的“面包屑”样式链接列表。因此,如果用户在〜/ CVR.aspx上,我希望显示以下内容:

CVR控制 - CVR

所以我需要一个SQL查询,它递归地获取所有父菜单项的列表,直到行上的父项为空。)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

对于SQL-Server,您可以使用简单的CTE执行此操作:

WITH MenuCTE AS
(
  SELECT Id, parent, Text, Url
  FROM menu
  WHERE Id = 8
  UNION ALL
  SELECT p.Id, p.parent, p.Text, p.Url
  FROM MenuCTE c
  INNER JOIN menu p ON c.parent = p.id
)
SELECT *
FROM MenuCTE ;

Live Demo

例如,对于id = 8,这应该给你:

Id  parent     Text             Url
8     6        CVR           ~/cvr.aspx
6    NULL   CVR Control   ~/CVRDashboard.aspx