表 - 用户
列 - (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/