복붙노트

[SQL] 부모 - 자식 체인에 대한 SQL 쿼리

SQL

부모 - 자식 체인에 대한 SQL 쿼리

나는 부모로서 테이블에 하나 명의 다른 멤버를 참조 할 수 있습니다 하나의 테이블이있다. 그 부모는 등 부모로서 하나 개의 다른 행을 참조 ... 그리고 수 있습니다.

id     col1     col2    parentID
1      foo      bar       NULL
2      blah     boo       1
3      fob      far       2
4      wob      lob       NULL

나는 ID를 부여 체인을 반환하고 싶습니다. 그래서 ID가 3 인 경우에 나는 3 행, 2 행을 반환하고 ID가 나는 2 행을 반환하고, ID가 1 또는 4 난 그냥 그 행을 반환한다면 1. 행 것이 있었다면 1. 행.

감사합니다

해결법

  1. ==============================

    1.재귀 CTE를 사용합니다 :

    재귀 CTE를 사용합니다 :

    DECLARE @id INT
        SET @id = 3
    
    ;WITH hierarchy AS (
      SELECT t.id, t.parentid
        FROM YOUR_TABLE t
       WHERE t.id = @id
     UNION ALL
     SELECT x.id, x.parentid
       FROM YOUR_TABLE x
       JOIN hierarchy h ON h.parentid = x.id)
    SELECT h.id
      FROM hierarchy h
    

    결과 :

    id
    ---
    3
    2
    1
    
  2. ==============================

    2.여기 가서

    여기 가서

    SELECT P.cat_id AS parent_cat_id, P.parent_id AS ROOT, P.cat_name AS parent_cat_name, C.parent_id, C.cat_id, C.cat_name FROM categories AS P LEFT OUTER JOIN categories AS C ON C.parent_id=P.cat_id WHERE P.parent_id IS NULL ORDER BY parent_cat_name, cat_name
    
  3. ==============================

    3.재귀 CTE를 사용하는 경우, 추가하는 것을 잊지 마세요

    재귀 CTE를 사용하는 경우, 추가하는 것을 잊지 마세요

    h.parentid <> x.id
    

    당신에하는 가입

    JOIN hierarchy h ON h.parentid = x.id)
    

    다른 사람은 단지 최대 재귀 오류는 루프 때문에

  4. ==============================

    4.

    WITH Hierarchy(ChildId, ChildName, Generation, ParentId)
    AS
    (
        SELECT Id, Name, 0, ParentId
            FROM UserType AS FirtGeneration
            WHERE ParentId IS NULL        
        UNION ALL
        SELECT NextGeneration.Id, NextGeneration.Name, Parent.Generation + 1, Parent.ChildId
    
            FROM UserType AS NextGeneration
            INNER JOIN Hierarchy AS Parent ON NextGeneration.ParentId = Parent.ChildId    
    )
    SELECT *
        FROM Hierarchy
        OPTION(MAXRECURSION 32767)
    
  5. from https://stackoverflow.com/questions/4188427/sql-query-for-parent-child-chain by cc-by-sa and MIT license