SQL - 有效地比较来自两个表的所有列的数据

时间:2014-09-18 05:33:29

标签: sql sql-server-2008

我有两个表,表示Table1和Table2具有相同的列和相同的模式结构。

现在我想从Table2中选择表1中的数据。但是,在比较数据时,我想比较这两个表中的所有列。比如,表1中的整个记录​​应该出现在表2中。在SQL Server 2008中实现此目的的最快和最有效的方法是什么?这两个表都包含大约1000-2000条记录,这些表格将被非常频繁地访问。

2 个答案:

答案 0 :(得分:2)

intersect运算符就是这样做的:

SELECT *
FROM   table1
INTERSECT
SELECT *
FROM   table2

答案 1 :(得分:0)

用"存在",你有一个解决方案:

select * from Table1 t1 where exists (select 1 from Table2 t2  
    where t1.col1 = t2.col1
      and t1.col2 = t2.col2  
      and t1.col3 = t2.col3  
      and ...                 // check here all columns ...
   ) 

在空值的情况下,此解决方案存在一些问题,只能通过" IS NOT NULL"来测试。或者" IS NULL"因此是补充解决方案:

select * from Table1 t1 where exists (select 1 from Table2 t2  
    where (t1.col1 = t2.col1 or (t1.col1 IS NULL and t2.col1 IS NULL))
      and (t1.col2 = t2.col2 or (t1.col2 IS NULL and t2.col2 IS NULL))  
      and (t1.col3 = t2.col3 or (t1.col3 IS NULL and t2.col3 IS NULL))  
      and ...                 // check here all columns ...
   )