在 SQL 服务器中检索连接的行

Retrieve connected rows in SQL Server

我在 SQL 服务器中有这个 table:

+--------------+---------------------+
| AccountId    | AccountIdAssociated |
+--------------+---------------------+
| 2            | 3                   |
| 3            | 15                  |
| 1            | 30                  |
| 3            | 12                  |
| 12           | 10                  |
| 10           | 50                  |
| 19           | 32                  |
| 18           | 33                  |
+--------------+---------------------+

如您所见,帐户 2、3、10、12、15 和 50 直接或传递地相互连接我如何仅使用一个数字检索所有这些连接的 AccountIds(让我们说 AccountId = 2)

您在这里需要的是几个 rCTE 来“遍历”分层数据:

WITH VTE AS(
    SELECT *
    FROM (VALUES(2 ,3 ),
                (3 ,15),
                (1 ,30),
                (3 ,12),
                (12,10),
                (19,32),
                (18,33))V(AccountID,AccountIdAssociated)),
rCTEUp AS(
    SELECT V.AccountID,
           V.AccountIdAssociated
    FROM VTE V
    WHERE V.AccountID = 3
    UNION ALL
    SELECT V.AccountID,
           V.AccountIdAssociated
    FROM VTE V
         JOIN rCTEUp r ON V.AccountIdAssociated = r.AccountID),
rCTEDown AS(
    SELECT V.AccountID,
           V.AccountIdAssociated
    FROM VTE V
    WHERE V.AccountID = 3
    UNION ALL
    SELECT V.AccountID,
           V.AccountIdAssociated
    FROM VTE V
         JOIN rCTEDown r ON V.AccountID = r.AccountIdAssociated)
SELECT AccountID,
       AccountIdAssociated
FROM rCTEUp
UNION ALL
SELECT AccountID,
       AccountIdAssociated
FROM rCTEDown
WHERE AccountID != 3;