【问题标题】:How to find records that exist in all 4 tables? SQL Server 2008如何查找所有 4 个表中存在的记录? SQL Server 2008
【发布时间】:2018-04-26 07:48:12
【问题描述】:

我必须将记录从一个系统迁移到另一个系统。有4张不同的桌子。第一个表包含有关每个用户的所有信息。每行都有唯一的 ID,即主键。所以我需要从表一中获取主键并在其他 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 的所有记录。如何在 SQL Server 中实现2008 年?或者我需要单独添加/导入每个表?如果有人可以帮助完成这项任务,请告诉我。谢谢!

【问题讨论】:

  • 内连接每个表...似乎合乎逻辑
  • 您拥有的 inner-join 标签看起来很有希望。

标签: sql sql-server-2008 inner-join exists


【解决方案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,你必须小心。结果集可能包含重复项。删除重复项可能会非常昂贵。

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多