2016-09-20 2 views
0

동일한 서버의 여러 데이터베이스에있는 여러 테이블의 이름, 전자 메일 및 계정 이름을 결합하는 하나의 큰 테이블을 선택하려고합니다. 같은 테이블을 포함하고 있지만 다른 (지역별) 데이터를 가지고있는 4 개의 데이터베이스가 있습니다. 첫 번째 데이터베이스에 대한SQL Server의 여러 데이터베이스에서 반복되는 테이블을 조인하는 방법

예 :

SELECT t1.FirstName, 
     t1.LastName, 
     t1.Email, 
     t1.AccountID, 
     t2.AccountName, 
     t2.AccountID 
INTO NewContactsTable 
FROM DataBase1.dbo.Contacts t1 
INNER JOIN DataBase1.dbo.Accounts t2 ON t2.AccountID = t1.AccountID 

그래서 내가 (연락처에 가입하고 테이블 계정) 만 3 개 다른 추가 데이터베이스 (DATABASE2, DataBase3, DataBase4)으로 위와 같은 일을하고 싶습니다 단일 쿼리에서.

+2

UNION ALL을 사용하고 각 쿼리를 개별적으로 쓸 수는 없습니까? –

+0

다른 DB를 쿼리하는 방법이 궁금하십니까? 그렇다면 링크 된 서버가 될 것입니다. 그런 다음 여기에있는 것처럼 해당 서버에 가입하십시오. – scsimon

+1

동일한 서버에있는 다른 DB는 링크 된 서버 일 필요는 없습니다. 그냥 질문과 같은 표기법을 사용하지만 다른 DB들 : Database2.dbo.Accounts 등 – ajeh

답변

2

쿼리는 다음과 같이 수 :

SELECT t1.FirstName, t1.LastName, t1.Email, t1.AccountID, 
     t2.AccountName, t2.AccountID 
INTO NewContactsTable 
FROM DataBase1.dbo.Contacts t1 INNER JOIN 
    DataBase1.dbo.Accounts t2 
    ON t2.AccountID = t1.AccountID 
UNION ALL 
SELECT t1.FirstName, t1.LastName, t1.Email, t1.AccountID, 
     t2.AccountName, t2.AccountID 
FROM DataBase2.dbo.Contacts t1 INNER JOIN 
    DataBase2.dbo.Accounts t2 
    ON t2.AccountID = t1.AccountID 
UNION ALL 
SELECT t1.FirstName, t1.LastName, t1.Email, t1.AccountID, 
     t2.AccountName, t2.AccountID 
FROM DataBase3.dbo.Contacts t1 INNER JOIN 
    DataBase3.dbo.Accounts t2 
    ON t2.AccountID = t1.AccountID 
UNION ALL 
SELECT t1.FirstName, t1.LastName, t1.Email, t1.AccountID, 
     t2.AccountName, t2.AccountID 
FROM DataBase4.dbo.Contacts t1 INNER JOIN 
    DataBase4.dbo.Accounts t2 
    ON t2.AccountID = t1.AccountID; 

그러나, 내가 먼저 테이블을 만든 다음 별도로 각 쿼리에서 행을 삽입하는 경향이있을 것이다.

+0

원래 질문의 일부는 아니지만 ... 네 개의 원본 DB/테이블에 중복이있는 경우 ... 쿼리를 분리하여 db/tables 2-4에 "where not exists"를 실행하여 중복 방지를 수행 할 수 있습니다 . 일명, 고든의 제안은 좋은 것입니다. 아마 더 나은 성능을 보일 것이며 다른 데이터 무결성 검사가 가능해질 것입니다. – granadaCoder

+0

그건'union all '이 아닌'union'을 사용하는 것과 같습니다. – ajeh

+0

'UNION'은 이미 UNION ALL이 모든 것을 취하는 반면에 UNITY는 이미 다른 값을 선택하기 때문에 select 문 사이에서 Union을 사용했습니다. –

관련 문제