sql >> Databáze >  >> RDS >> Sqlserver

Rekurzivní dotaz na SQL Server

Zkuste toto:

;WITH CTE
AS
(
    SELECT DISTINCT
        M1.Product_ID Group_ID,
        M1.Product_ID
    FROM matches M1
        LEFT JOIN matches M2
            ON M1.Product_Id = M2.matching_Product_Id
    WHERE M2.matching_Product_Id IS NULL
    UNION ALL
    SELECT
        C.Group_ID,
        M.matching_Product_Id
    FROM CTE C
        JOIN matches M
            ON C.Product_ID = M.Product_ID
)
SELECT * FROM CTE ORDER BY Group_ID

Můžete použít OPTION(MAXRECURSION n) k ovládání hloubky rekurze.

DEMO SQL FIDDLE



  1. Jak mohu zadat dotaz na všechny řádky v okruhu 5 mil od mých souřadnic?

  2. Chyba 1022 – Nelze zapisovat; duplicitní klíč v tabulce

  3. DATEDIFF() vs DATEDIFF_BIG() v SQL Server:Jaký je rozdíl?

  4. Oracle, nastavte datum a čas jako první den v měsíci