zoukankan      html  css  js  c++  java
  • 数据库CTE递归查询

    1.已知表结构

    pft_Agent(agentCode,agentName,upAgentCode)

    2.查询某个节点的所有上级节点

    2.1 查询语句

    WITH cte
    AS (
    	SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
    	WHERE agentCode='000003'
    	UNION ALL
        SELECT  up.agentCode,up.agentName,up.upAgentCode FROM cte 
    	INNER JOIN dbo.pft_Agent up ON up.agentCode = cte.upAgentCode
    )
    select * FROM cte

    2.2 查询结果

    3.查询某个节点的所有下级节点

    3.1查询语句

    WITH cte
    AS (
    	SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
    	WHERE agentCode='000001'
    	UNION ALL
        SELECT  down.agentCode,down.agentName,down.upAgentCode FROM cte 
    	INNER JOIN dbo.pft_Agent down ON down.upAgentCode = cte.agentCode
    )
    select * FROM cte

    3.2查询结果

    4.将查询封装为一个函数

    4.1查询所有上级,含自己

    CREATE FUNCTION [dbo].[getUpAgent]
    (@agentCode NVARCHAR(50))
    RETURNS @returnTable TABLE 
    ( agentCode NVARCHAR(50))
    AS
    BEGIN
        WITH cte AS (
                    SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
                    WHERE agentCode=@agentCode
                    UNION ALL
                    SELECT  up.agentCode,up.agentName,up.upAgentCode FROM cte
                    INNER JOIN dbo.pft_Agent up ON up.agentCode = cte.upAgentCode
                        )
                        
        INSERT INTO @returnTable
        select agentCode FROM cte 
        
        RETURN 
    END

     4.2查询所有下级,含自己

    ALTER FUNCTION [dbo].[getDownAgent]
    (@agentCode NVARCHAR(50))
    RETURNS @returnTable TABLE 
    ( agentCode NVARCHAR(50))
    AS
    BEGIN
        WITH cte AS (
                            SELECT agentCode FROM dbo.pft_Agent
                            WHERE agentCode=@agentCode
                            UNION ALL
                            SELECT  down.agentCode  FROM cte
                            INNER JOIN dbo.pft_Agent down ON down.upAgentCode = cte.agentCode
                        )
                        
        INSERT INTO @returnTable
        select * FROM cte 
        
        RETURN 
    END
  • 相关阅读:
    laravel、TP、YII框架的优缺点
    关于如何关闭Laravel中严格模式的两种方法
    Laravel扩展阿里云OSS对象存储
    Laravel权限管理的应用记录
    laravel原生MySQL之Group记录
    laravel导出Xlsx
    软件工程课的认识
    斗兽棋项目开发计划书
    斗兽棋测试计划说明书
    测试报告分析
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/11884635.html
Copyright © 2011-2022 走看看