2010-02-02 4 views
0

2 개의 Access 2000 데이터베이스를 하나로 병합하는 쿼리를 작성하고 싶습니다. 각 테이블에는 동일한 필드가있는 35 개의 테이블이 있고 은 대부분 고유 데이터입니다. 데이터베이스 A의 행이 데이터베이스 B보다 항상 우선해야하는 경우와 동일한 "기본 키"를 가질 행이 있습니다. 키 또는 관계없이 데이터베이스가 생성되므로 "기본 키"를 따옴표로 묶습니다. 예를 들어 :액세스 - 동일한 구조의 두 데이터베이스 병합

데이터베이스 A, 표

col1 col2 
Frank red 
Debbie blue 

데이터베이스 B, 표

col1 col2 
Harry orange 
Debbie pink 

그리고 그 결과 내가 좋아하는 것 :

col1 col2 
Frank red 
Harry orange 
Debbie blue 

이러한 데이터베이스

생성에 의해 다운로드 SQL에 익숙하지 않은 사용자에게 복사하여 붙여 넣을 쿼리를 제공하고 싶습니다. 그들은 분명히 하나의 DB를 다른 DB에 임포트하거나 링크시켜야합니다.

결과 쿼리가 결합 된 세 번째 테이블을 만든 다음 다른 두 테이블을 삭제해야합니다. 그러나 이상적으로 데이터베이스 A의 행을 데이터베이스 B에 추가하는 것이 좋습니다 (필요한 경우 재정의).

물론 나는 어디에서 시작해야할지에 대한 조언을 얻기 위해 완전한 대답을 찾고 있지 않습니다. 몇 가지 mySQL 경험이 있고 조인의 기초를 이해합니다. 이 모든 것을 하나의 쿼리로 수행 할 수 있습니까, 아니면 각 테이블마다 별도의 테이블을 사용해야합니까?

고맙습니다!

+0

왜 제목에서'SQL'을 제거? 나는 대답으로 SQL 쿼리를 찾고있다. – carillonator

답변

1

방법에 대해 :

SELECT t.ID, t.Field1, t.Field2 INTO NewTable FROM 
(SELECT a.ID, a.Field1, a.Field2 
FROM Table1 A 
UNION 
SELECT x.ID, x.Field1, x.Field2 
FROM Table1 x IN 'C:\docs\db2.mdb' 
WHERE x.ID NOT IN (SELECT ID From Table1)) t 
+0

아름답다, 고마워. 정확히 내가 무엇을 찾고 있었는지. – carillonator

+0

이 SQL은 동일한 ID를 가진 두 데이터베이스의 레코드가 실제로 동일한 레코드라고 가정합니다. 데이터베이스의 두 사본이 분기되면 두 사본이 분기 된 후 * 생성 되었기 때문에 동일한 레코드가 아닌 중복 된 ID가있을 수 있습니다. –

+0

사용자는이 사실을 인식하고 있으며 Debbie Blue가 필요하며 Debbie Pink 발언 기록이 필요 없다고 언급합니다. – Fionnuala

0

이것은 SQL 솔루션이 아니지만 SQL에 익숙하지 않은 사용자에게 SQL 문을 잘라내어 붙여 넣으라고 알려주는 역할 만합니다.

  1. 우선 순위가 가장 높은 테이블 (col1)에 고유 한 키를 정의하는 것이 좋습니다.
  2. 그런 다음 데이터베이스 B의 모든 데이터를 '마스터'테이블에 복사하십시오.

모든 중복에는 실패하지만 '새'레코드가 삽입됩니다. 필요한 경우 고유 키 제약 조건을 제거한 후 제거하십시오.

귀하의 질문에 데이터베이스 B에서 결과 테이블이 필요해 보입니다. 따라서 시작하기 전에 또는 완료 한 후에 사용자가 데이터베이스 B에 테이블을 복사하게 할 수 있습니다.