반복 그룹을 처리할 때는 UNION 쿼리를 사용한다. 이런저런 이유로 적절하게 정규화를 적용한 설계를 할 수 없다면, UNION을 사용해 읽기 전용 뷰를 만들어 데이터를 ‘정규화’할 수 있다. 또 코드 1-2와 같이 UNION으로 쿼리를 덧붙여 Predecessors 테이블에 레코드를 추가하는 효과도 낼 수 있다.
코드 1-2 데이터를 정규화하는 UNION 쿼리
SELECT ID AS DrawingID, Predecessor_1 AS Predecessor
FROM Assignments WHERE Predecessor_1 IS NOT NULL
UNION
SELECT ID AS DrawingID, Predecessor_2 AS Predecessor
FROM Assignments WHERE Predecessor_2 IS NOT NULL
UNION
SELECT ID AS DrawingID, Predecessor_3 AS Predecessor
FROM Assignments WHERE Predecessor_3 IS NOT NULL
UNION
SELECT ID AS DrawingID, Predecessor_4 AS Predecessor
FROM Assignments WHERE Predecessor_4 IS NOT NULL
UNION
SELECT ID AS DrawingID, Predecessor_5 AS Predecessor
FROM Assignments WHERE Predecessor_5 IS NOT NULL
ORDER BY DrawingID, Predecessor;
Note ≣
한 로우에 있는 중복 데이터를 포함해 모든 데이터를 가져와야 한다면 UNION에 ALL 키워드를 붙인 UNION ALL을 사용한다. 하지만 이 예제에서는 ID가 3인 로우에 중복된 Predecessor 값을 제거하는 것이 목적이다.