sql - 如何获取树结构中节点的所有子节点? SQL 查询?

标签 sql database tree

表 - 用户

列 - (userId,name,managerId)

行-

(1,nilesh,0)
(2,nikhil,1)    
(3,nitin ,2)  
(4,Ruchi,2)

如果我提供用户 ID,它应该列出所有向他报告的人。 如果我给 userId = 2,它应该返回 3,4。

这个查询是否正确

SELECT ad3.userId
FROM user au , user  au2 , user  au3
WHERE 
    ad.managerId = ad2.managerId AND 
    ad3.managerId = ad2.userId AND
    ad.userId=2

是否有任何有效的方法来管理数据库中的树结构? 左右叶方式怎么样?

最佳答案

我使用文本字段来处理 SQL 中的树。它比使用左/右值更容易。

让我们以 MySQL 文章中的示例为例:

+-----------------------+
| name                  |
+-----------------------+
| ELECTRONICS           |
|  TELEVISIONS          |
|   TUBE                |
|   LCD                 |
|   PLASMA              |
|  GAME CONSOLES        |
|  PORTABLE ELECTRONICS |
|   MP3 PLAYERS         |
|    FLASH              |
|   CD PLAYERS          |
|   2 WAY RADIOS        |
|    FRS                |
+-----------------------+

它会产生这样的表格:

Id      ParentId        Lineage     Name

1       null            /1/         ELECTRONICS
2       1               /1/2/       TELEVISIONS
3       2               /1/2/3/     TUBE
4       2               /1/2/4/     LCD
5       2               /1/2/5/     PLASMA
6       6               /1/6/       GAME CONSOLES
7       1               /1/7/       PORTABLE ELECTRONICS
8       7               /1/7/8/     MP3 PLAYERS
9       8               /1/7/8/9/   FLASH
10      7               /1/7/10/    CD PLAYERS
11      1               /1/11/      2 WAY RADIOS
12      11              /1/11/12/   FRS

一定要找到所有你使用便携机血统的便携机:

SELECT * FROM theTable WHERE Lineage LIKE '/1/7/%'

缺点:

  • 您需要在每次 INSERT 后执行更新以将 PK 附加到 Lineage

建议:

我通常会添加另一列,将路径作为文本放入(例如 'electronics/televisions/tube')

关于sql - 如何获取树结构中节点的所有子节点? SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6274942/

相关文章:

sql - 如何复制SQL Server对称 key ?

MySQL - 按值的距离排序,优先考虑较高的值

mysql - 查找 mysql 数据库模式中使用的内存百分比的查询是什么?

java - 如何使用 primefaces 树下载文件

php - Mysql:多个where查询

ruby-on-rails - 不知道如何在 rails 中使用 'serialize' 方法

javascript - 在 Knex 迁移中为现有行设置默认的 notNullable 引用列

database - CHAR_LENGTH 是 BYTE 或 CHAR

SQL "tree-like"查询 - 大多数父组

java - 递归检索二叉搜索树的子集