【问题标题】:How can I make recursive query in SQL?如何在 SQL 中进行递归查询?
【发布时间】:2021-05-21 12:37:34
【问题描述】:

我有两张桌子,比如

用户

id | name
_______________
1  | one
2  | two
3  | three
4  | four
5  | five
6  | six

员工

id | userId | reportedTo
_________________________
1  | 1      |   null
2  | 2      |   1
3  | 3      |   2
4  | 4      |   3
5  | 5      |   4
6  | 6      |   5

我需要类似的东西

如果我为某个用户运行查询,那么它将返回所有reportedTo 是这个用户的记录以及reportTo 是reportTo 这个用户的其他用户

喜欢:

如果我为用户 1 运行此查询,那么它将返回所有记录,接受员工的 userId 1

id | userId | reportedTo
    _________________________
    2  | 2      |   1
    3  | 3      |   2
    4  | 4      |   3
    5  | 5      |   4
    6  | 6      |   5

如果我对 userId 4 运行查询,那么它将从员工表中返回 userId 5 和 6 的记录

id | userId | reportedTo
    _________________________
    5  | 5      |   4
    6  | 6      |   5

谁能帮帮我。

提前致谢

【问题讨论】:

  • 我建议你说“递归”,而不是“重复”。 Recurring 意味着它反复发生,比如中间有一段时间。有些读者会认为你的意思是你想使用MySQL event scheduler

标签: mysql sql database recursion


【解决方案1】:

您可以使用递归 CTE:

with recursive cte(i, u, r) as (
   select * from employees where reportedTo = 1
   union all
   select e.* from cte c join employees e on c.u = e.reportedTo
)
select c.i id, c.u userId, c.r reportedTo from cte c;

输出:

id userId reportedTo
2 2 1
3 3 2
4 4 3
5 5 4
6 6 5

demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2010-11-03
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多