mysql 5 recursive query

MySQL 5 并不直接支持递归查询(recursive query),但可以通过一些技巧来实现递归查询。下面介绍两种常见的方法:

方法一:使用存储过程(stored procedure)

可以创建一个存储过程,在存储过程内部通过循环和递归来实现查询。具体步骤如下:

创建存储过程,并传入递归查询所需的参数。

在存储过程内部,使用循环和递归查询数据,并将查询结果存储到临时表中。

当满足递归终止条件时,从临时表中获取最终的查询结果。

方法二:使用WITH RECURSIVE子句

MySQL 8.0及以上版本支持WITH RECURSIVE子句,可以通过该子句来实现递归查询。但是,如果您使用的是MySQL 5,则可以使用以下方法:

创建一个名为recursive的表,包含两个字段:id和parent_id。

将需要查询的数据插入到recursive表中。

使用UNION ALL连接recursive表和子查询,通过限制每次连接的行数来实现递归查询。

以下是示例代码:

CREATE TABLE recursive (
  id INT PRIMARY KEY,
  parent_id INT
INSERT INTO recursive VALUES (1, NULL), (2, 1), (3, 2), (4, 3), (5, 4);
SELECT *
FROM recursive
WHERE id = 1
UNION ALL
SELECT r.*
FROM recursive r
INNER JOIN (
  SELECT *
  FROM recursive
  WHERE id = 1
) r1 ON r.parent_id = r1.id
UNION ALL
SELECT r.*
FROM recursive r
INNER JOIN (
  SELECT *
  FROM recursive
  INNER JOIN (
    SELECT *
    FROM recursive
    WHERE id = 1
  ) r1 ON recursive.parent_id = r1.id
) r2 ON r.parent_id = r2.id
UNION ALL
SELECT r.*
FROM recursive r
INNER JOIN (
  SELECT *
  FROM recursive
  INNER JOIN (
    SELECT *
    FROM recursive
    INNER JOIN (
      SELECT *
      FROM recursive
      WHERE id = 1
    ) r1 ON recursive.parent_id = r1.id
  ) r2 ON recursive.parent_id = r2.id
) r3 ON r.parent_id = r3.id;

以上是两种常见的方法,供您参考。

  •