我必须将记录从一个系统迁移到另一个系统。有4个不同的表。第一个表包含有关每个用户的所有信息。每行都有唯一的ID,即主键。所以我需要从表1中获取主键并在其他3个表中找到匹配的记录。这些表具有我们应该用来匹配用户的外键。这是一个例子:
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的Users表中的所有记录。如何在SQL Server中实现2008年?或者我需要单独添加/导入每个表?如果有人可以帮忙完成这项任务,请告诉我。谢谢!
答案 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
,你必须要小心。结果集可能包含重复项。删除重复项可能非常昂贵。