2017-11-13 3 views
0

한 시스템에서 다른 시스템으로 레코드를 마이그레이션해야합니다. 4 가지 테이블이 있습니다. 첫 번째 표는 각 사용자에 대한 모든 정보를 포함합니다. 각 행에는 기본 키인 고유 ID가 있습니다. 그래서 테이블 1에서 기본 키를 가져와 다른 3 개의 테이블에서 일치하는 레코드를 찾아야합니다. 이러한 테이블에는 사용자를 매치시키는 데 사용해야하는 외래 키가 있습니다. 다음은 예입니다4 개 테이블 모두에있는 레코드를 찾는 방법은 무엇입니까? SQL Server 2008

SELECT * 
FROM Users AS ur 
WHERE EXISTS(
    SELECT * 
    FROM TableA AS a 
    WHERE ur.ur_id = a.a_urid 
) 

//Maybe second option can be to use INNER JOIN 
SELECT * 
FROM Users AS ur 
    INNER JOIN TableA AS a 
     ON ur.ur_id = a.a_urid 
    INNER JOIN TableB AS b 
     ON ur.ur_id = b.b_urid 
    INNER JOIN TableC AS c 
     ON ur.ur_id = c.c_urid 

쿼리 위의 유일한 사용자와 나는 테이블 A, B와 C에 일치하는 사용자 ID가 사용자 테이블의 모든 기록과 일치 수 있을지 궁금하네요 표 A에 대한 일치하는 레코드를 반환합니다 어떻게 SQL Server 2008에서이를 달성 할 수 있습니까? 또는 각 테이블을 개별적으로 추가/가져올 필요가 있습니까? 누구든지이 작업을 도울 수 있으면 알려주십시오. 고맙습니다!

+0

각 테이블을 조인하십시오 ... 논리적으로 보입니다. – scsimon

+0

'내부 조인'태그가 유망 해 보입니다. –

답변

1

당신은 intersect를 사용할 수 있습니다

select u.id 
from users u 
intersect 
select a.a_urid 
from a 
intersect 
select b.b_urid 
from b 
intersect 
select c.c_urid 
from c; 

또 다른 방법은 exists을 사용하는 것입니다

SELECT ur.* 
FROM Users ur 
WHERE EXISTS (SELECT 1 FROM TableA AS a WHERE ur.ur_id = a.a_urid) AND 
     EXISTS (SELECT 1 FROM TableB AS b WHERE ur.ur_id = b.b_urid) AND 
     EXISTS (SELECT 1 FROM TableC AS c WHERE ur.ur_id = c.c_urid) ; 

JOIN를 사용하면주의해야한다. 결과 집합에 중복이 포함될 수 있습니다. 그리고 중복을 제거하는 것은 매우 비쌀 수 있습니다.

관련 문제