我有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个表具有相同的计数。有什么想法吗?
答案 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
如果没有任何回报,那么它们是平等的。