2012-06-28 4 views
0

주어진 부모 ID에서 모든 하위 항목 (및 해당 하위 항목 등)을 반환해야하는 쿼리를 작성하고 있습니다. 예를 들어Union 중첩 된 쿼리 선택

는 :

예상대로
SELECT id 
FROM table 
WHERE parent_id IN 

    (SELECT id 
    FROM table 
    WHERE parent_id IN 

     (SELECT id 
     FROM table 
     WHERE parent_id IN 

      (SELECT id 
      FROM table 
      WHERE code = 'A01') 
     ) 
    ) 

, 이것은 단지 최상위 SELECT 쿼리에 대한 결과 집합을 반환합니다. 각 어린이 수준에 UNION SELECT을 쓸 수는 있지만 다소 어색해 보입니다 ...

각 중첩 쿼리의 각 결과 집합을 내 기본 결과 집합에 추가 할 수있는 방법이 있습니까? 또는 서투른 선택을해야합니까?

+0

어떤 버전의 SQL입니까? 2005 년부터 [재귀 CTE] (http://msdn.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx)를 사용할 수 있습니다. – Jamiec

+0

죄송합니다, SQL 서버 2008을 사용하고 있습니다 – Elliott

답변

3

문제는 재귀 쿼리로 해결하는 것이 가장 좋습니다. 가장 좋은 방법은 나중에 SQL Server 2005에서 재귀 쿼리를 수행하거나하는 보조 노트에 Common Table Expressions

;with cte as (
    SELECT id, parent_id 
    FROM [table] 
    WHERE code = 'A01' 

    UNION ALL 

    SELECT t.id, t.parent_id 
    FROM [table] t 
     INNER JOIN cte 
      ON cte.id = t.parent_id 
) 
SELECT id 
FROM cte 
OPTION (MAXRECURSION 0); 

을 사용하는 것입니다 ... 나는 table되는 테이블 이름의 아이디어를 좋아하지 모르겠어요.

+0

: D Thank you. 예를 들어 테이블과 컬럼의 이름을 작성했습니다;) – Elliott