首页  >  文章  >  数据库  >  如何将基于 MSSQL CTE 的类别树查询迁移到 MySQL?

如何将基于 MSSQL CTE 的类别树查询迁移到 MySQL?

Barbara Streisand
Barbara Streisand原创
2024-11-20 17:06:18328浏览

How to Migrate a MSSQL CTE-Based Category Tree Query to MySQL?

将 MSSQL CTE 查询转换为 MySQL

公用表表达式 (CTE) 是 Microsoft SQL Server 中用于递归查询的强大工具。然而,MySQL 不支持 CTE,这给基于 CTE 的查询转换为 MySQL 带来了挑战。

在提供的示例中,CTE 查询用于从下到上构建类别树,从指定的位置开始类别 ID。要在 MySQL 中复制此功能,必须实现递归存储过程。

创建递归存储过程

以下 MySQL 存储过程模拟 MSSQL CTE 的行为:

CREATE PROCEDURE get_category_tree(IN start_category_id INT)
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE id INT;
  DECLARE pid INT;
  DECLARE name VARCHAR(255);

  # Initialize the cursor
  DECLARE cursor_categories CURSOR FOR
    SELECT id, parentid, name
    FROM category
    WHERE id = start_category_id;

  # Open the cursor
  OPEN cursor_categories;

  # Fetch the first row
  FETCH cursor_categories INTO id, pid, name;

  # While there are more rows
  WHILE done = 0 DO
    # Print the current row
    SELECT id, pid, name;

    # If the parent ID is NULL, mark as done
    IF pid IS NULL THEN
      SET done = 1;

    ELSE
      # Move the cursor to the parent row
      SET start_category_id = pid;
      FETCH cursor_categories INTO id, pid, name;
    END IF;
  END WHILE;

  # Close the cursor
  CLOSE cursor_categories;
END PROCEDURE;

用法

要使用存储过程,请使用所需的起始类别 ID 作为参数来调用它:

CALL get_category_tree(197);

这将从类别 197 开始打印类别树,向上遍历层次结构,直到到达根。

以上是如何将基于 MSSQL CTE 的类别树查询迁移到 MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn