首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回叶节点的Sql查询?

问返回叶节点的Sql查询?
EN

Stack Overflow用户
提问于 2013-03-01 03:19:03
回答 2查看 2.3K关注 0票数 0

嗨,我有一个表格,如下所示

代码语言:javascript
复制
ID  ||  NAME ||  PARENTID ||  LEAF  
1   ||   A   ||    NULL   ||   0      
2   ||   B   ||     1     ||   0  
3   ||   c   ||     2     ||   1  
4   ||   A   ||     1     ||   1

它是数据表中的一种树形结构。我想检索某个特定父节点的所有叶节点(Leaf=1)。有谁能建议我使用sql查询吗?

我已经尝试过了:

代码语言:javascript
复制
select ( SELECT LEAF,NAME FROM Tablex WHERE PARENTID=1) from Tablex where LEAF=1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 3
EN

Stack Overflow用户

发布于 2013-03-01 04:11:42

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

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15143868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档