将 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中文网其他相关文章!