递归CTE协助

时间:2018-11-06 14:05:40

标签: sql tsql common-table-expression recursive-query

我不是SQL方面的专家,可以做简单的联接和联合查询,我想做的是提取彼此相关的Order的摘录。我相信我可以使用递归CTE来获取所需的摘要。

当前流程是如果要修改订单,则取消原始交易并创建新订单。两个订单都有不同的订单ID,这些ID是主键。您可能会遇到以下情况:订单被修改x次。 “ x”是完全可变的。

订单详细信息包含在表A1中。 Order_ID是主键 订单彼此关联的方式在表A2中。 Order_ID是新订单,Parent_Order_ID是原始订单。

到目前为止,我有以下内容

WITH DT_TEST AS(
    select * from 
    A1 inner join A1 on A1.Order_Id = b.Parent_Order_Id
)
SELECT * FROM DT_TEST

我知道我需要与锚进行联合,但是如果有人可以将我指向正确的方向,我不知道我需要什么语法。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我们可以在SQL Server中将递归CTE措辞为基本查询和递归查询之间的联合。可能棘手的部分是在递归查询中,它由基本表与CTE本身的连接组成。请注意,连接条件是基表中给定的Parent_Order_Id与前一个CTE中的某个Order_Id匹配。

WITH DT_TEST AS (
    -- base query
    SELECT Order_Id, Parent_Order_Id
    FROM A1
    WHERE Parent_Order_Id IS NULL
    UNION ALL 
    -- recursive query
    SELECT a.Order_Id, a.Parent_Order_Id
    FROM A1 a
    INNER JOIN DT_TEST b
        ON a.Parent_Order_Id = b.Order_Id
)

SELECT * FROM DT_TEST;