1

我在不同的数据库中有两个具有相似架构的不同表。比较这两个表之间的记录的最佳方法是什么。我需要找出第一个表中存在的记录,其对应的记录在第二个表中不存在,从第一个表中过滤记录,并带有一些 where 子句。到目前为止,我已经有了这个 SQL 结构:

Select t1_col1, t1_ col2 from table1
where t1_col1=<condition> AND 
t1_col2=<> AND
NOT EXISTS 
(SELECT * FROM
table2
WHERE
t1_col1=t2_col1 AND
t1_col2=t2_col2)

有一个更好的方法吗?

上面的查询看起来不错,但我怀疑它是在不评估查询第一部分中的条件的情况下进行逐行比较,因为查询的第一部分会大大减少结果集。这发生了吗?

4

2 回答 2

3

只用except关键字!!!

Select t1_col1, t1_ col2 from table1
    where t1_col1=<condition> AND 
    t1_col2=<condition> 
except
SELECT t2_col1, t2_ col2 FROM table2

它返回来自查询左侧的任何不同值,除了右侧查询未返回的操作数。

有关MSDN的更多信息

于 2011-03-28T09:29:09.603 回答
1

如果期望两个表中的数据具有相同的主键,您可以使用 IN 关键字过滤那些在另一个表中没有找到的数据。这可能是最简单的方法。

如果您对Redgate Data Compare等第三方工具持开放态度,您可以尝试一下,这是一个非常不错的工具。Visual Studio 2010 Ultimate 版也有这个功能。

于 2011-03-28T09:10:42.897 回答