m0_69693998 2024-12-14 20:09 采纳率: 41.4%
浏览 47
已结题

关于#mysql#的问题:UNION ALL(相关搜索:sql语句)

mysql,通过一个tg_id等于6692011484,查找pid等于6692011484的下级tg_id,输出tg_id和level 1 ,查找pid的pid等于6692011484的下级tg_id,输出tg_id和level 2,查找pid的pid的pid等于6692011484的下级tg_id,输出tg_id和level 3,sql语句怎么写

img

img

WITH RECURSIVE user_hierarchy AS (
    -- 基础查询,包含起始用户(tg_id为6692011484)及其直接上级(如果存在的话)
    SELECT tg_id, pid, 1 AS level
    FROM wa_users
    WHERE tg_id = 6692011484 OR pid = 6692011484
    UNION ALL
    -- 递归查询,查找每个用户的上级用户(即pid对应的用户)
    SELECT u.tg_id, u.pid, uh.level + 1 AS level
    FROM wa_users u
    JOIN user_hierarchy uh ON u.tg_id = uh.pid
)
-- 选择最终需要的数据,即pid等于给定值的用户及其层级
SELECT tg_id, pid, level
FROM user_hierarchy
WHERE pid = 6692011484;

  • 写回答

35条回答 默认 最新

  • 阿里嘎多学长 2024-12-14 20:16
    关注
    获得0.15元问题酬金

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    你可以使用 MySQL 的 UNION ALLRECURSIVE 语句来实现这个查询。

    首先,创建一个递归函数来查找下级 tg_id

    WITH RECURSIVE tg_tree AS (
      SELECT tg_id, pid, 1 AS level
      FROM your_table
      WHERE tg_id = 6692011484
      UNION ALL
      SELECT t.tg_id, t.pid, level + 1
      FROM your_table t
      JOIN tg_tree p ON t.pid = p.tg_id
    )
    SELECT tg_id, level
    FROM tg_tree
    WHERE level = 1;
    

    这个查询首先找到 tg_id 等于 6692011484 的记录,然后递归地查找它的下级 tg_id,直到找到 level 等于 1 的记录。

    注意:你需要将 your_table 替换为你的实际表名。

    代码核心部分

    WITH RECURSIVE tg_tree AS (
      ...
    )
    SELECT tg_id, level
    FROM tg_tree
    WHERE level = 1;
    

    说明

    这个查询使用了 WITH RECURSIVE 语句来定义一个递归函数 tg_tree,它将查找 tg_id 等于 6692011484 的记录,并递归地查找它的下级 tg_id。最终,查询将输出 tg_idlevel,其中 level 等于 1 表示该记录是第一个下级记录。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题