2017-11-13 6 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に一致するレコードを返します。私は、テーブルA、BおよびCのユーザーIDに一致しているユーザーテーブルからすべてのレコードを一致させることができれば、私は思ったんだけどそれは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を使用して、あなたは注意する必要があります。結果セットに重複が含まれている可能性があります。重複を取り除くことは非常に高価になる可能性があります。

関連する問題