【问题标题】:Iterate a join in SQL Server [duplicate]在 SQL Server 中迭代连接 [重复]
【发布时间】:2021-04-08 18:40:17
【问题描述】:

我正在尝试遍历一个特定的表。该表只有一个Parent ID 和一个Child ID。我想要的是选择所有孩子,然后将它们用作父母来选择下一组孩子。一个父 ID 可以链接到多个子 ID。我事先只知道第一个父 ID。

这是我尝试过的:

DECLARE @Child AS int

SET @Child = 117019

WHILE @Child IS NOT NULL
BEGIN

    SELECT
        @Child = adsa.FK_CHILDASSEMBLY
    FROM
        ASSEMBLYDETAILSUBASSEMBLY adsa
    WHERE
        adsa.FK_PARENTASSEMBLY = @Child

    PRINT @Child
END;

这只会导致第一个子 ID 的无限循环,但我想要的是所有以某种方式相互链接的唯一子 ID 的完整列表。

【问题讨论】:

  • 这听起来像是 rCTE 的任务。示例数据和预期结果将帮助我们为您提供帮助。

标签: sql sql-server


【解决方案1】:

这是一个非常简单的递归 CTE:

不清楚外键是针对什么的,我用过CHILDASSEMBLY_ID

DECLARE @parent AS int = 117019;

WITH cte AS (
    SELECT
        @parent CHILDASSEMBLY_ID
    UNION ALL
    SELECT
        adsa.CHILDASSEMBLY_ID
    FROM
        ASSEMBLYDETAILSUBASSEMBLY adsa
    JOIN
        cte ON cte.FK_CHILDASSEMBLY = adsa.CHILDASSEMBLY_ID
)
SELECT *
FROM cte

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 2010-10-30
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多