MySQL 查询指定 ID 下所有子级,排除 VIP 子级及其子级
MySQL 查询指定 ID 下所有子级,排除 VIP 子级及其子级
本文将介绍如何使用 MySQL 递归查询 (Recursive CTE) 获取指定 ID 下所有子级,同时排除 VIP 子级及其所有子级。
假设有一个名为 'table_name' 的表,包含以下字段:
- 'id': 子级 ID,主键
- 'parent_id': 上级 ID
- 'is_vip': 是否为 VIP (0 表示非 VIP,1 表示 VIP)
以下是给出的 MySQL 查询语句,用于查询 'id=1' 的所有子级,如果某一个子级是 VIP,则不查询该子级下面的数据:
WITH RECURSIVE cte AS (
SELECT id, parent_id, is_vip
FROM table_name
WHERE id = 1
UNION ALL
SELECT t.id, t.parent_id, t.is_vip
FROM table_name t
JOIN cte ON t.parent_id = cte.id
WHERE cte.is_vip = 0
)
SELECT * FROM cte;
该查询使用了递归查询 (Recursive CTE) 的方式,通过不断连接子级与上级的关联,实现查询 'id=1' 的所有子级,并在遇到 VIP 子级时停止查询该子级下面的数据。
工作原理:
- 初始查询:
SELECT id, parent_id, is_vip FROM table_name WHERE id = 1查询 'id=1' 的记录,作为递归查询的起点。 - 递归查询:
UNION ALL连接初始查询结果和递归查询结果。 - 条件过滤:
WHERE cte.is_vip = 0确保只查询非 VIP 子级,并将其与父级连接,直到所有非 VIP 子级都被查询到。 - 最终结果:
SELECT * FROM cte输出所有非 VIP 子级的记录。
通过这种方式,我们可以有效地查询指定 ID 下的所有子级,并排除 VIP 子级及其子级,从而满足特定需求。
原文地址: https://www.cveoy.top/t/topic/qB6N 著作权归作者所有。请勿转载和采集!