2012-06-07 5 views
0

나는이 오라클 DB 스키마를 가지고 각 스키마는 두 개의 테이블 다음과 같습니다비교 데이터는

1) 열이있는 테이블 T1 : child_id, PARENT_ID 입력
2) 표 T2 열 : id, attribute, value

이 두 스키마에 저장된 데이터를 비교하고 가장 좋은 방법으로 불일치를 찾을 수있는 방법은 무엇입니까?

T1: 
1, NULL, 'Fruit' 
2, 1, 'Orange' 
3, 1, 'Apple' 
4, 3, 'Gala' 

T2: 
1, 'Company Name', 'ABC' 
1, 'Dept', 'Fruits' 
2, 'name', 'XX Oranges' 
2, 'color', 'Orange' 
2, 'taste', 'Sweet' 
3, 'name', 'YY Apples' 
3, 'color', 'Red' 
4, 'taste', 'Very Sweet' 

데이터는 계층 구조의 모든 수준까지 저장 될 수있는 불일치가 들어있을 경우 내가 알아하려면 : 데이터는 다음과 같이 할 수있다 'Gala' 'Apples'는 다른 스키마에서는 '매우 달콤한'것이 아닙니다.

이 두 스키마에서 ID가 다를 수 있습니다.

+0

예상 결과를 표시 할 수 있습니까? – Arion

+0

예, 저장하려고하는 위치는 어디입니까? – matchdav

+0

차이점을 보여주는 한 모든 종류의 출력이 좋습니다. 화면에 인쇄하거나 플랫 파일 일 수도 있고 다른 테이블 일 수도 있습니다. 나는 이것이 꽤 복잡한 문제라는 것을 알고 있지만 어떤 힌트라도 괜찮을 것이다. –

답변

1

스키마가 'schema1'및 'schema2'라고 가정하면 집합 연산자를 사용하여 불일치를 검색 할 수 있습니다. 이 쿼리에 의해 반환 된 행은 두 스키마 사이의 차이를 나타냅니다

(
    SELECT * FROM schema1.t1 
    MINUS 
    SELECT * FROM schema2.t1 
) 
UNION ALL 
(
    SELECT * FROM schema2.t1 
    MINUS 
    SELECT * FROM schema1.t1 
); 

이 미니 쿼리의 첫 번째는 당신에게 schema2.t1에없는 schema1.t1에있는 모든 행을 제공을, 두 번째는 제공 schema1.t1에없는 schema2.t1의 사람들 - UNION ALL과 함께이 두 가지를 넣으면 모든 불일치가 생깁니다. 원하는 쿼리에 따라 쿼리를 독립적으로 실행하는 것이 더 명확 할 수 있습니다.

분명히 위의 't1'대신 't2'를 사용하여 다른 테이블의 차이점을 확인할 수 있습니다.

+0

내가 언급하지 않은 한 가지는이 두 스키마에서 ID가 다를 수 있다는 것입니다. –