gpt4 book ai didi

显示分层数据的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 02:50:38 25 4
gpt4 key购买 nike

我有两个表 - 'Users' 和 'Supervision'

对于这个例子,我的用户表非常简单:-

Users
=====
ID (PK)
UserName

一些用户管理其他用户,所以我建立了第二个表'Supervision'来管理这个:-

Supervision
===========
UserID
SuperID - this is the ID of the staff member that the user supervises.

此表用于将 Users 表连接到自身以标识特定的用户主管。一个用户可能有多个主管,因此这张表非常适合这个目的。

这是我在“用户”中的示例数据:-

userID  userName
1 Bob
2 Margaret
3 Amy
4 Emma
5 Carol
6 Albert
7 Robert
8 Richard
9 Harry
10 Arthur

还有我在“监督”中的数据:-

userID  superID
1 2
1 3
2 4
2 5
3 4
3 5
6 1
6 7
7 8
7 9
9 10

如果我想知道谁直接向 Bob 报告,写一个 SQL 查询很简单,并告诉我 Margaret 和 Amy 是他的直接报告。

然而,我想做的是编写一个查询,显示 Bob 下的每个人,因此它需要查看 Bob 的直接下属,然后是他们的直接下属,等等 - 它会给 Margaret、Amy、在这种情况下,艾玛和卡罗尔就是结果。

我假设这需要某种递归,但我完全卡住了..

最佳答案

你应该使用 recursive CTE :

WITH RCTE AS 
(
SELECT * FROM dbo.Supervision WHERE UserID = 1
UNION ALL
SELECT s.* FROM dbo.Supervision s
INNER JOIN RCTE r ON s.userID = r.superID
)
SELECT DISTINCT u.userID, u.userName
FROM RCTE r
LEFT JOIN dbo.Users u ON r.superID = u.userID

SQLFiddle DEMO

关于显示分层数据的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com