在 MyBatis 中,你可以使用遞歸的 SQL 語句來查詢具有層次結構或樹形結構的數據。為了實現這個功能,你需要創建一個遞歸的公共表表達式(Recursive Common Table Expression,簡稱 CTE)。
以下是一個使用遞歸 SQL 語句查詢樹形結構數據的示例:
category 的表,其結構如下:CREATE TABLE category (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent_id INT
);
WITH RECURSIVE category_tree AS (
SELECT id, name, parent_id
FROM category
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, c.parent_id
FROM category c
JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;
</select>
在上面的 SQL 語句中,我們首先創建了一個名為 category_tree 的遞歸 CTE。在第一部分(WHERE 子句),我們選擇所有沒有父類別(即根類別)的類別。然后,在第二部分(UNION ALL 子句),我們通過將當前類別的 parent_id 與遞歸 CTE 中的 id 進行連接,逐級添加子類別。
最后,我們從遞歸 CTE category_tree 中選擇所有記錄,得到完整的類別樹。
注意:遞歸 SQL 語句在不同的數據庫中可能有所不同。上述示例適用于支持遞歸 CTE 的數據庫,如 PostgreSQL、MySQL 8.0+ 和 SQL Server。對于不支持遞歸 CTE 的數據庫,你可能需要使用其他方法實現遞歸查詢,例如使用存儲過程或在應用程序代碼中處理遞歸邏輯。