gpt4 book ai didi

mysql - MySQL 中的递归查询类似于 PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 03:26:46 25 4
gpt4 key购买 nike

我有一个表,我想根据 idupline_id(父 id)字段递归地获取所有行。这在 PostgreSQL 中是这样完成的:

WITH RECURSIVE downlines(id, number, upline_id, first_name, last_name, level) AS (
SELECT id, number, upline_id, first_name, last_name, 1
FROM mytable
WHERE id = 2061
UNION ALL
SELECT a.id, a.number, a.upline_id, a.first_name, a.last_name, d.level + 1
FROM mytable a, downlines d
WHERE a.upline_id = d.id
)

SELECT * from downlines

但是我是 MySQL 的新手,无法弄清楚如何将上述查询转换为 MySQL 版本。我为 MySQL 找到了这个:

select  *
from (select * from agents order by id) products_sorted,
(select @pv := '2061') initialisation
where find_in_set(upline_id, @pv) > 0
and @pv := concat(@pv, ',', id)

但是结果不匹配,在 MySQL 版本中缺少许多行。

谁能告诉我如何将上述 PostgreSQL 查询转换为 MySQL 以获得递归/分层(n/未知深度)数据?

最佳答案

MySQL 不支持 WITH RECURSIVE。但是要解决这个问题,您可以改用 session 变量(以 @ 开头) 来保存查询中的值。

试试这个:

SELECT a.id, a.number, a.upline_id, 
a.first_name, a.last_name,
@level:=@level+1 as `level`
FROM mytable a inner join
(
SELECT id, number, upline_id, first_name, last_name
FROM mytable WHERE id = 2061
) d on a.upline_id = d.id ,(select @level:=0) as p ;

关于mysql - MySQL 中的递归查询类似于 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com