嗨,我有一个表格,如下所示
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发布于 2013-03-01 03:43:02
数据库中的树结构是一个非常常见的问题。
有许多可能的方法。
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
发布于 2013-03-01 04:11:42
您尝试的查询应如下所示:
select tt.* FROM
( SELECT LEAF,NAME FROM Tablex WHERE PARENTID IS NOT NULL and PARENTID=1 ) AS tt
WHERE leaf=1;如果您想进一步使用它,可以使用下面的SQL Fiddle:http://sqlfiddle.com/#!2/2d95b8/2
https://stackoverflow.com/questions/15143868
复制相似问题