向上穿过一棵树

时间:2011-02-11 16:33:09

标签: sql sql-server recursion

我正在寻找最有效的遍历树形层次结构的方法..

我有/将有一张桌子并预计数百万条记录,树不会改变..

目前我正在存储一个像这样的树串

/ 20/1/1/1/1/1的

其中20是种子ID ..

如何高效爬行?我目前有这个

select * from reg where tree in ('/20/1/1/1/1','/20/1/1/1','/20/1/1','/20/1','20')

是否有一个sql命令,不要求我拆分并循环它?

我正在使用sql server并且知道CTE命令,但是当有数百万条记录时效果不佳..:/

感谢

1 个答案:

答案 0 :(得分:1)

反转您的比较!

SELECT * FROM reg WHERE tree='/20/1/1/1/1' OR '/20/1/1/1/1' LIKE CONCAT(tree, "/%");
祝你好运


mysql> create table temp_reg (tree varchar(255));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into temp_reg values ('/20/1/1/1/1'),('/30/1/1/1'),('/20/1');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from temp_reg where '/20/1/1/1/1' LIKE CONCAT(tree, "%");
+-------------+
| tree        |
+-------------+
| /20/1/1/1/1 |
| /20/1       |
+-------------+
2 rows in set (0.00 sec)