首頁 >資料庫 >mysql教程 >如何將基於 MSSQL CTE 的類別樹查詢遷移到 MySQL?

如何將基於 MSSQL CTE 的類別樹查詢遷移到 MySQL?

Barbara Streisand
Barbara Streisand原創
2024-11-20 17:06:18400瀏覽

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