【发布时间】:2017-02-09 02:30:16
【问题描述】:
我的数据库是这样的
**Code** | **Name** | **CodeParent** | **Level**
-XXX-| --TOP-| ----000000----| --0--
-YYY-| --TOP-| ----000000----| --0--
-AAA-| -Lower| ------XXX------| -1-
-BBB-| Lower2| ------AAA------| -2-
-CCC-| -Lower| ------YYY------| -1-
好吧,假设我想从这个表中选择
Select *
from table
where Code = 'XXX'
然后像这样检索数据
**Code** | **Name** | **CodeParent** | **Level**
-XXX-| --TOP-| ----000000----| --0--
-AAA-| -Lower| ------XXX------| -1-
-BBB-| Lower2| ------AAA------| -2-
我一直在寻找一天,但仍然不知道该怎么做。
我的数据库设计够好吗?
我试着选择喜欢
Select * From table where Code = 'XXX'
Union All
Select * From table where CodeParent = 'XXX'
表格没有限制级别
所以,2级后我不知道该怎么做。
【问题讨论】:
-
仅供参考,您可以搜索
recursive cte mssql -
在 SQL Server 中有一个层次结构数据类型msdn.microsoft.com/en-us/library/bb677173.aspx,它提供了许多帮助方法。在您的情况下,我相信您可以使用
IsAncestor助手。但首先您需要将数据加载到这种数据类型中,这很重要。执行您想要的操作的另一种标准方法是分配一个“平面路径”列,该列描述了一个平面字符串中从根开始的整个路径的元素。您只需在字符串上使用LIKE即可搜索 -
表示分层数据的一个相对简单的选项是使用nested sets。使用嵌套集,检索数据非常简单高效,但插入/更新可能有点复杂,因此嵌套集可能有意义,也可能没有意义,具体取决于您的要求。
-
谢谢大家,平面路径法很有意思。
-
一个现已删除的答案提供this helpful link。
标签: sql sql-server vb.net