我有两个不同的表,在不同的数据库中具有相似的模式。比较这两个表之间的记录的最佳方法是什么。我需要找出 - 第一个表中存在的记录,其第二个表中不存在相应的记录,从第一个表中过滤记录,其中包含一些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)
有更好的方法吗?
上面的查询看起来很好,但我怀疑它是在不评估查询第一部分的条件的情况下逐行进行比较,因为查询的第一部分会非常减少结果集。这是发生了吗?
答案 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版也具有此功能。