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
  • 相关阅读:
    Asp.Net+Oracle+BootStrap+Jquery
    UML类图几种关系的总结
    PHP对象在内存堆栈中的分配
    php sprintf 详解
    微信错误代码45047:客服消息只能发送20条/个用户
    php利用array_search与array_column实现二维数组查找
    mvc 详解
    php中++i 与 i++ 的区分详解
    Git 别名多个命令 超实用
    php 对象继承
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/11884635.html
Copyright © 2011-2022 走看看