鉴于简单的数据结构:
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。
答案 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