优化查询,比较不同数据库中具有相似模式的两个表

时间:2011-03-28 09:07:47

标签: sql sql-server compare database-optimization

我有两个不同的表,在不同的数据库中具有相似的模式。比较这两个表之间的记录的最佳方法是什么。我需要找出 - 第一个表中存在的记录,其第二个表中不存在相应的记录,从第一个表中过滤记录,其中包含一些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)

有更好的方法吗?

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

2 个答案:

答案 0 :(得分: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

它返回EXCEPT操作数左侧的查询中的任何不同值,这些值也不是从右侧查询返回的。

有关MSDN

的更多信息

答案 1 :(得分:1)

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

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