Wu Mr 2023-10-03 22:10 采纳率: 50%
浏览 10
已结题

SQL如何查询多级用户的数据

举例:
A用户下面有b,c用户
b用户有d,f用户
d用户有g,h用户
查询所有用户的客户数据的语句。
有两个表,一个是用户表(A表),一个是客户表(B表)
只查询4级A->B->D->G
希望能写一下逻辑备注

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-03 22:15
    关注

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    要查询多级用户的数据,可以使用递归查询或者使用连接查询。下面是使用递归查询的示例代码和逻辑备注:

    假设用户表的表名为users,包含列idname,其中id是用户的唯一标识,name是用户的姓名。
    客户表的表名为customers,包含列idname,其中id是客户的唯一标识,name是客户的姓名,还有一列user_id用于表示所属用户的id。

    递归查询的逻辑如下:

    1. 从用户表中选择4级用户(A->B->D->G),可以通过条件筛选或者使用JOIN查询连接多个表来实现。
    2. 使用递归查询,查询每个用户的直属客户以及下一级客户,直到达到指定的级别。
    3. 使用连接查询将用户表和客户表关联,获取所需的客户数据。

    下面是示例代码:

    WITH RECURSIVE cte AS (
      SELECT users.id AS user_id, users.name AS user_name, customers.id AS customer_id, customers.name AS customer_name, 1 AS level
      FROM users
      JOIN customers ON users.id = customers.user_id
      WHERE users.id = 'A' -- 根据用户id筛选4级A->B->D->G
      UNION ALL
      SELECT users.id, users.name, customers.id, customers.name, cte.level + 1
      FROM users
      JOIN customers ON users.id = customers.user_id
      JOIN cte ON cte.customer_id = customers.id
      WHERE cte.level < 4 -- 指定级别为4级
    )
    SELECT user_name, customer_name
    FROM cte;
    

    需要注意的是,上述代码中的users.id = 'A'是用于筛选用户的条件,你可以根据实际需求更改。同时,WHERE cte.level < 4用于指定查询的级别,这里设置为4级。你也可以根据实际需求进行修改。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 赞助了问题酬金20元 10月3日
  • 创建了问题 10月3日