SQL常用算法-遞歸表達(dá)式
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
語法函數(shù)
常見場景 一、制造業(yè)中,BOM是所有成本分析的底層,BOM表通常由自身ID,父級(jí)ID等元素構(gòu)成的層級(jí)表,通常我們需要獲得所有的末級(jí)元素,用于計(jì)算整體的材料費(fèi)用等 二、對(duì)于權(quán)限分配表,部門主數(shù)據(jù)也為帶有層級(jí)關(guān)系的層級(jí)表,通常我們需要對(duì)已知的部門查詢他的最上級(jí)部門,以此確認(rèn)權(quán)限 在上面兩種常見當(dāng)中,數(shù)據(jù)結(jié)構(gòu)都是以自身/上級(jí)的ID層級(jí)關(guān)系體現(xiàn),無論是通過頂層查詢底層還是通過底層查詢頂層,使用with as遞歸表達(dá)式都能輕松獲取我們所需要的數(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)品編碼,獲得所有最下級(jí)材料 WITH RECURSIVE ProductMaterials AS ( SELECT product_id, material_id, 1 AS level FROM bom_table WHERE parent_material_id IS NULL -- 找到最上級(jí)產(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)文章
正在查詢... |