2012-07-26 4 views
1

구조가 동일하고 테이블 A와 테이블 B가 약간 다른 두 개의 테이블이 있습니다. 테이블 A에는 포함되어 있지만 테이블에는 포함되지 않은 모든 행을 추출하고 싶습니다 B. 도와 주시겠습니까?같은 구조를 가진 테이블 간의 차이점

그건 그렇고 - 표 A는 정의 형식이며 이전에 생성되지 않았습니다.

그리고 추가로 - 분석 할 15 개의 SQL 스크립트가 있습니다. 15 개의 SQL 스크립트로 구성된 전체 프로세스의 시각화에 도움이되는 소프트웨어를 찾고 싶습니다. 좋은 것을 제안 할 수 있습니까?

+0

* 테이블의 구조는 무엇입니까? –

+0

불행히도 나는 그 정보를 줄 수 없다. – Dantes

+3

'table_a '가 아직 존재하지 않는다면 차이점이 없다. 또한, 우리는 예제를 제공하기 위해 _ 종류의 익명화를 수행 할 수 있어야합니다. –

답변

7
+1

허, 나는 그 키워드에 대해 * 알지 못했다. 그리고 [Teradata는 그것을 지원하는 것으로 보인다] (http://www.teradataforum.com/teradata_pdf/b035-1101-122a_5.pdf). –

+1

어떤 열에서 NULL 값을 허용하면 해당 열의 허용되는 값 범위를 벗어나는 알려진 값으로 열 값을 변환 할 수 있습니다. (예 : '~'또는 음수) –

0

수동으로 쿼리를 작성하는 데 어려움이 있으므로,이를 수행하는 도구 (예 : RedGate's SQL Compare)가 있습니다. 하지만 ... 모든 데이터의 차이 그리고 당신이에 결합 필드의 목록을 변경하고 키 필드에 필터 만 주요 차이점에 관심이 있다면

SELECT 
    A.* 
    ,B.* 
FROM 
    A LEFT OUTER JOIN B 
     ON A.Field1 = B.Field1 
     AND A.Field2 = B.Field2 
     ... -- join on each field 
WHERE 
    B.Field1 IS NULL OR 
    B.Field2 IS NULL OR 
    ... -- check for any NULL fields in B 

.

+0

당신은 단지 왼쪽 바깥 쪽 조인을 원한다면 tableA에있는 아무런 표제도없이 tableB에있는 것을 얻을 수있는 전체가 아니길 바란다 – Mark

+0

@ 마크 말이 맞다. 나는 처음에 LEFT를 넣었고 둘 다 원했지만 쿼리를 고칠 수는 없다고 생각했다. , thanks –

0

한 가지 방법은 왼쪽 바깥이 모든 첫 번째 테이블에서 선택하고 다음 두 번째로이 일치 조인을 사용하는 것입니다 참조

SELECT * FROM Table_A 
EXCEPT 
SELECT * FROM Table_B 

보십시오. 두 번째 테이블에서 오는 여분의 열이 NULL이면 두 번째 테이블에 일치하는 레코드가 없습니다. C에

가정하자 열 a는 내가 같은 문제는 내가 큰 데이터베이스를 처리 할 수있는 내 자신의 소프트웨어를 쓴 정기적으로 직면 한 두 테이블

select a.* 
    from tableA a 
    left outer join tableB on a.a = b.a and ... a.c = b.c 
    where b.a is null and ... and b.c is null 
+0

이것은 흥미로운 것 같습니다. 내 테이블이 정의 형식이라고 언급했는데 이전에는 생성되지 않았습니다. 이 문제와 관련하여 추출하는 방법에 대한 제안을 해주실 수 있습니까? – Dantes

+0

tableA가 아직 작성되지 않은 경우 "표 A에는 포함되지만 표 B에는 포함되지 않은 모든 행을 추출하십시오"라는 메시지가 표시 될 때 선택할 데이터가 없습니다. 따라서 tableA에 데이터가없는 경우 리턴 할 데이터가 없습니다. 따라서 당신은 당신이 더 명확하게 요구하는 것을 만들 필요가 있다고 생각합니다. – Mark

+0

아마 제 설명이 거의 모호했습니다. 테이블 A와 B는 정의와 같이 작성되었습니다. 예를 들어 테이블 C와 D가있는 경우 - 테이블 A를 다음과 같이 만듭니다. SELECT * FROM TableC, TableD -> 이제 테이블 A처럼 정의됩니다. – Dantes

1

에 고유 (열 수십, 수만의 라인의) 효율적으로. 나는 당신이 당신의 문제를 해결했다고 상상하지만 다른 누군가가 똑같은 문제에 직면하면 나는 여기에 올린다.

소프트웨어는 R에 있으며 쿼리하여 MySQL 서버에 저장할 수 있습니다. RMySQL을 통해 MySQL 링크를 구성하는 데 약간의 시간이 걸릴 수 있으므로 기지를 두 개의 CSV 파일로 내보내는 것이 더 쉬울 지 모르지만 테스트 해보기 위해. gitHub에서 확인하십시오.

우리 팀에서는 매우 정기적으로 사용하며 만족합니다.

관련 문제