將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中文網其他相關文章!