您好我有一张表如下
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
答案 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