如何比较2个表的记录?

时间:2014-03-06 18:50:49

标签: sql sql-server

我有2个表,每个表有2个记录组,我需要比较那些记录是否相等。

Table 1 result: set after count(input),group by (input)

    input count
    0     10
    1     122


Table 2 result set

    input count
    0      10
    1      122

我需要比较并看到2个表具有相同的计数。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

请阅读除相交和相交的MSDN条目。 http://technet.microsoft.com/en-us/library/ms188055.aspx

除了是特定于订单的操作数。 因此,Abe的答案部分正确且部分错误。

以下是[tempdb]中的测试,其中表[a]和[b]具有相同的记录。

EXCEPT返回左表中的任何不同值,这些值在右表中也找不到。

因此,在我们的第一次比较中返回一个空集,因为表[a]中的所有记录都在表[b]中。

-- use tempdb
use tempdb;
go

-- table a
create table a
(
    a_input int,
    a_count int
);

-- table b
create table b
(
    b_input int,
    b_count int
);

-- add data
insert into a values (0,10), (1,122);
insert into b values (0,10), (1,122);

-- any differences
select * from a
except 
select * from b;

让我们在比较的右侧添加一条新记录。同样,结果集为空。但是,表格不一样。表[b]还有一个记录。

-- add to right side
insert into b values (2,20);

-- any differences
select * from a
except 
select * from b;

正确的解决方案是采用两个比较的联合。左边比较右边和左边相比左边。

-- Left side
select * from 
(
  select * from a
  except 
  select * from b
) lcompare

union

-- Right side
select * from
(
  select * from b
  except 
  select * from a
) rcompare;

如果结果集不为空,则存在差异。

更好的方法是将两个表合并为一个数据集,按每个列分组,并获得非= 2的计数。

附件中有动态TSQL来执行此操作。

http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx

我认为这会更快,因为它会做一个联盟和一个组。第一个解决方案执行两个连接以查找任何不匹配的行,然后是联合。

同样,差异只会出现在大型记录集中。

祝你好运。

答案 1 :(得分:0)

试试这个:

Select * from Table1
Except
Select * from Table2

如果没有任何回报,那么它们是平等的。