Sql Query返回叶子节点?

时间:2013-02-28 19:19:03

标签: mysql sql hierarchical-data

您好我有一张表如下

ID  ||  NAME ||  PARENTID ||  LEAF  
1   ||   A   ||    NULL   ||   0      
2   ||   B   ||     1     ||   0  
3   ||   c   ||     2     ||   1  
4   ||   A   ||     1     ||   1

它是数据表中的一种树结构。我想检索特定父节点的所有叶子节点(Leaf = 1)可以任何一个建议我对此进行sql查询吗?

我试过这个:

select ( SELECT LEAF,NAME FROM Tablex WHERE PARENTID=1) from Tablex where LEAF=1

2 个答案:

答案 0 :(得分:3)

数据库中的树结构是一个非常常见的问题。

有许多可能的方法。

SQL(在MySQL中)不是处理树结构的最佳方式,因为树结构可能具有无限级别,并且在MySQL中没有(有效)方式来处理这样的重复性,因为你必须加入表n-次数,其中n是树级数。当级别数可能不同时 - 你必须在PL / SQL(程序性SQL)中使用一些存储过程,这将比PHP,C或其他语言中的简单循环效率低(速度慢且将使用更多内存)。

请考虑使用其他语言(PHP或您正在使用的其他语言)将表转换为树。

正如Gordon Linoff和ypercube在评论中所写,有更多高级数据库(如Oracle),这些数据库中的处理树在编程/编码方面更有效,更舒适。

其他信息:

Managing Hierarchical Data in MySQL (by Mike Hillyer)

Google search: sql tree structure

PHP方法:

php / Mysql best tree structure

PHP tree structure for categories and sub categories without looping a query

来自ypercube的另一个有用链接:

Models for hierarchical data - presentation by Bill Karwin / Karwin Software Solutions LLC

答案 1 :(得分:1)

您尝试的查询应如下所示:

select tt.* FROM 
( SELECT LEAF,NAME FROM Tablex WHERE PARENTID IS NOT NULL and PARENTID=1 ) AS tt 
WHERE leaf=1;

如果你想进一步使用它,那么这是SQL小提琴:http://sqlfiddle.com/#!2/2d95b8/2