더북(TheBook)

반복 그룹을 처리할 때는 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 ≣

한 로우에 있는 중복 데이터를 포함해 모든 데이터를 가져와야 한다면 UNIONALL 키워드를 붙인 UNION ALL을 사용한다. 하지만 이 예제에서는 ID가 3인 로우에 중복된 Predecessor 값을 제거하는 것이 목적이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.