SQL很好地检索树结构

时间:2010-08-24 09:25:40

标签: sql sql-server database-design tree

鉴于简单的数据结构:

ID    |    Category_Name    |    Parent_ID

示例:

1          Cars                    0
2          Boxes                   0
3          Lamborghinis            1
4          VW Camper Vans          1
5          Big Boxes               2
6          Small Boxes             2
7          Cereal Boxes            2
8          Broken Lambos           3
9          Yellow Ones             3
10         Rusty                   8
11         Milkshake Stained       8
12         Chocolate Flavour       11
13         Strawberry              11
14         Indiscernible Solution  11

表示一个简单的树导航结构,以编程方式检索可呈现格式的树的最佳方法是什么?我们可以创建一个SQL语句来“按顺序”检索它们吗?

感谢您的帮助!如果我的方法有误,请随时发表评论。

我正在使用SQL-Server 2000。

3 个答案:

答案 0 :(得分:2)

我通常在应用程序代码中构建树结构。部分是因为我对c#比对SQL更有信心,但这也是因为我通常需要将数据处理成合适的c#结构。

SQL在列表和树等递归结构上非常糟糕。如果我必须将树构建在我的数据库中,我会去存储过程。但可能有一种我不知道的聪明方式。

如果您使用Oracle,则可以使用Connect By来解决问题。

答案 1 :(得分:2)

如果您使用的是SQL Server 2008,则可能需要尝试新的hierarchyid数据类型。

如果你不是,那么另一种方法是研究适用于所有数据库的nested sets模型。

如果您正在使用SQL Server 2005及更高版本,则可以使用recursive CTEs来检索树结构。

答案 2 :(得分:2)

不适用于SQL2000,但如果您设法升级到2k5,则可以执行

WITH t AS(SELECT id, parent_id, category_name FROM mytable WHERE parent_id IS NULL
          UNION ALL
          SELECT c.id, c.parent_id, c.category_name FROM t p JOIN mytable c ON c.parent_id = p.id)
SELECT * FROM t
相关问题