2009-03-27 4 views

답변

4

당신은 테이블 간의 차이점을 만들 수 AQT 같은 도구를 사용할 수 있습니다.

또 다른 방법은 테이블을 텍스트 파일로 덤프하고 WinMerge과 같은 diff 도구를 사용하는 것입니다. 이 접근 방식을 사용하면 복잡한 SQL을 사용하여 테이블을 동일한 레이아웃으로 변환 할 수 있습니다.

1

이런 종류의 질문에 대해 나는 당신이 찾고있는 것에 관해 매우 구체적이어야한다고 생각합니다. 다양한 방법으로 그것을 해석 할 수있는 많은 방법들이 있습니다. 당신의 질문이 그것을 보증하지 않는다면 어떤 접근법은 너무 큰 망치가 될 것입니다.

가장 단순한 수준에서는 "테이블 데이터가 정확히 같거나가요?"입니다. 더 복잡한 것으로 이동하기 전에 간단한 개수 비교로 대답하려고 시도 할 수 있습니다.

스케일의 다른 쪽 끝에는 "다른 테이블에 동일한 행이없는 각 테이블의 행을 표시하십시오"또는 "행이 동일한 키이지만 데이터 값이 다른 위치를 표시하십시오" .

실제로 테이블 A와 테이블 B를 동기화하려는 경우 MERGE 명령을 사용하면 비교적 간단 할 수 있습니다.

+0

"MERGE"명령이 나에게 새롭다. 그것은 많은 상황에서 트릭입니다. – thrag

1

지출 할 돈이 있다면 Oracle 용 PowerDIFF 도구 인 http://www.orbit-db.com을 사용하십시오. 다양한 비교 옵션이 제공되며 이러한 유형의 작업을 훌륭하게 수행합니다.

38

이 시도하지 :

(select * from T1 minus select * from T2) -- all rows that are in T1 but not in T2 
union all 
(select * from T2 minus select * from T1) -- all rows that are in T2 but not in T1 
; 

어떠한 외부 도구를. union all의 성능 문제는 없습니다.

3

dbForge Data Compare for Oracle** 데이터 비교 및 ​​동기화를위한 ** 무료 GUI 도구를 사용해보십시오.이 도구는 모든 데이터베이스에서 또는 부분적으로 이러한 작업을 수행 할 수 있습니다.

alt text

1

빠른 솔루션 :

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM TABLE2 

레코드가 없어야한다 ...

0

select * from table1 where table1.col1 in (select table2.col1 from table2)

col1 기본 키 열입니다 가정하고이 table1의 모든 행을 줄 것이다 table2 열 1에 해당합니다.

select * from table1 where table1.col1 not in (select table2.col1 from table2)

희망이 도움이

0

시도 : SQL의 오라클 11g와

select distinct T1.id 
    from TABLE1 T1 
where not exists (select distinct T2.id 
        from TABLE2 T2 
        where T2.id = T1.id) 

+