mysql5.7实现递归查询如下: A是上级,B是下级,计算A的时候B是A的关联方,计算B的时候,A也是B的关联方 假如A客户和B客户关联,B客户和C客户关联,正常查询就是A的关联方是B、C;B的关联方就是A、C;C的关联方就是B,A
时间: 2024-02-24 21:54:02 浏览: 88
在 MySQL 中实现递归查询可以使用 WITH RECURSIVE 语句。以下是一个实现上述功能的示例:
```sql
WITH RECURSIVE
recursive_cte (id, name, parent_id, level, path) AS (
-- 初始查询,从 A 开始
SELECT id, name, parent_id, 0, CAST(id AS CHAR(200))
FROM customers WHERE name = 'A'
UNION ALL
-- 递归查询,关联到下级
SELECT c.id, c.name, c.parent_id, rc.level + 1,
CONCAT(rc.path, ',', CAST(c.id AS CHAR(200)))
FROM customers c
INNER JOIN recursive_cte rc ON rc.id = c.parent_id OR rc.parent_id = c.id
WHERE rc.path NOT LIKE CONCAT('%', CAST(c.id AS CHAR(200)), '%')
)
SELECT id, name, parent_id, level, path FROM recursive_cte;
```
这个查询使用了一个递归公共表达式,从 A 开始查询。在每次递归时,使用 INNER JOIN 关联到下级客户,使用 CONCAT 函数将路径拼接起来,同时使用 NOT LIKE 来避免环路查询。最后输出递归结果。
阅读全文