SQL常用算法-遞歸表達式
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
語法函數(shù)
常見場景 一、制造業(yè)中,BOM是所有成本分析的底層,BOM表通常由自身ID,父級ID等元素構(gòu)成的層級表,通常我們需要獲得所有的末級元素,用于計算整體的材料費用等 二、對于權(quán)限分配表,部門主數(shù)據(jù)也為帶有層級關(guān)系的層級表,通常我們需要對已知的部門查詢他的最上級部門,以此確認權(quán)限 在上面兩種常見當中,數(shù)據(jù)結(jié)構(gòu)都是以自身/上級的ID層級關(guān)系體現(xiàn),無論是通過頂層查詢底層還是通過底層查詢頂層,使用with as遞歸表達式都能輕松獲取我們所需要的數(shù)據(jù)。 示例
WITH RECURSIVE DepartmentHierarchy AS ( SELECT dept_id, parent_dept_id, 0 AS level FROM departments WHERE dept_id = :input_dept_id -- 指定要查詢的部門ID UNION ALL SELECT d.dept_id, d.parent_dept_id, dh.level + 1 FROM departments d INNER JOIN DepartmentHierarchy dh ON d.dept_id = dh.parent_dept_id ) SELECT dept_id, parent_dept_id FROM DepartmentHierarchy WHERE level = (SELECT MAX(level) FROM DepartmentHierarchy); 2.已知產(chǎn)品編碼,獲得所有最下級材料 WITH RECURSIVE ProductMaterials AS ( SELECT product_id, material_id, 1 AS level FROM bom_table WHERE parent_material_id IS NULL -- 找到最上級產(chǎn)品 b.product_id, b.material_id, pm.level + 1 FROM bom_table b INNER JOIN ProductMaterials pm ON b.parent_material_id = pm.material_id) SELECT DISTINCT product_id, material_id FROM ProductMaterials WHERE (product_id, level) IN ( SELECT product_id, MAX(level) AS max_level FROM ProductMaterials GROUP BY product_id ); 該文章在 2024/3/30 12:51:21 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |