跨数据库比较两个表

时间:2014-10-08 03:46:28

标签: sql

我有一个包含两列的表......一个int ID和一个varchar userName。我们想要计算一个表中的记录数以及它们是否存在于另一个表中。

表1是来源 表2是dest

--Clear the table
DELETE FROM dest

--Allow identity insert
SET IDENTITY_INSERT dest ON

--copy the source to the destination
insert into dest(id, userName) select id, userName from source

到目前为止,这么好。我现在遇到的问题是,现在已经删除了一些记录,我们希望找到source和dest之间的差异。因此,想象一下在dest上发生了一些活动,导致它丢失了一些仍然存在于源中的记录。

--Count number of records in source.   The result here is 18247
SELECT COUNT(*) FROM source

--Count number of records in dest.  The result here is 18298
SELECT COUNT(*) FROM dest

--There is a difference of 51 records. Correct??

--Now count all records that exist in source, but not in dest. i.e. records deleted from dest.

SELECT COUNT(*) FROM source AS sourceTable WHERE NOT EXISTS(SELECT 1 FROM dest AS destTable WHERE destTable.id=sourceTable.id)

--The result here is 18165 (???)

显然,不存在的查询不正确。关于我在这里做错了什么的线索?我只想要一个属于源中存在的记录的ID列表,但现在不再存在于dest。

1 个答案:

答案 0 :(得分:0)

假设您的RDBMS是SQL Server,请仔细查看EXCEPT(msdn.microsoft.com)如何在这里使用。你想要什么( - 现在计算源中存在但不存在于dest中的所有记录)将读取

SELECT
  COUNT(*)
FROM
  (
    SELECT
      *
    FROM
      source
    EXCEPT
    SELECT
      *
    FROM
      dest
   ) AS dt