Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рекурсивна заявка в SQL Server

Опитайте това:

;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

Можете да използвате OPTION(MAXRECURSION n) за да контролирате дълбочината на рекурсията.

ДЕМО ЗА SQL FIDDLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате шаблони в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 16

  2. Изпит за администриране на Azure SQL база данни със съвети и съвети (DP-300)

  3. Разберете типа данни на колоните, върнати в набор от резултати в SQL Server

  4. Възстановяване на база данни от авариен режим в SQL Server

  5. EXEC sp_executesql с множество параметри