二张相同的表找不同的数据问题
二张表结构一样,就二个字段:号码和金额
现在想找出来一张表比另外一张表多出哪些数据
表1: 表2
号码 金额 号码 金额
001 1.00 001 1.00
001 2.00 001 2.00
001 2.00 002 1.00
002 1.00
002 2.00
002 3.00
002 1.00
结果应该得到多出来的数据为:
号码 金额
001 2.00
002 2.00
002 3.00
002 1.00
多出四条,有直接用语句得出来的方法吗?
[解决办法]
select a.*
from 表1 as a,表2 as b
where a.号码+金额 <> b.号码+金额
[解决办法]
select * from 表1
where not exists(select 1 from 表2 where 表1.号码=表2.号码 and 表1.金额=表2.金额)
[解决办法]
结果应该得到多出来的数据为:
号码 金额
001 2.00
002 2.00
002 3.00
002 1.00
----------
楼主说得“多”跟我们理解的不一样
[解决办法]
表的的,一定是量一一的?
表1: 表2
号码 金额 号码 金额
001 3.00 001 1.00
001 2.00 001 2.00
001 2.00 002 1.00
002 1.00
002 2.00
002 3.00
002 1.00
如果是情,A中7,B中3,但是查出不是4,而是5吧。
A中第一001可以B中001的.
[解决办法]
--建境
Create Table 表1
(ID int IDENTITY(1,1),
号码 Char(3),
金额 Numeric(10, 2))
Insert 表1 Select '001 ', 1.00
Union All Select '001 ', 2.00
Union All Select '001 ', 2.00
Union All Select '002 ', 1.00
Union All Select '002 ', 2.00
Union All Select '002 ', 3.00
Union All Select '002 ', 1.00
Create Table 表2
(ID int IDENTITY(1,1),
号码 Char(3),
金额 Numeric(10, 2))
Insert 表2 Select '001 ', 1.00
Union All Select '001 ', 2.00
Union All Select '002 ', 1.00
GO
--测试
--先找出不在表2存在的数据
select a.* from 表1 a left join 表2 b on a.号码=b.号码 and a.金额=b.金额 where b.号码 is null
union all
--再找出在表2中存在 而且有二条以上的记录并减去其中一条
select a.* from 表1 a left join 表2 b on a.号码=b.号码 and a.金额=b.金额
where a.ID not in (select min(a.ID) from 表1 a left join 表2 b on a.号码=b.号码 and a.金额=b.金额
group by a.号码,a.金额)