日期:2014-05-18  浏览次数:20557 次

请教大家一个关于去除重复项的问题!
我在做查询时需要用到   a、b、c,三个相关联表的数据。但是查询后b表的数据有重复的   通过where   限制后还是有重复数据产生。如下
select   distinct(a.[StaffID]),b.[staffJob]   ,c.[staffPart],
convert(varchar(100),a.[EmployTime],23)   as   [EmployTime]   from   [Staffs]  
as   a,[staffJob]   as   b,[staffPart]   as   c   where   a.[StaffID]=b.[StaffID]   and   a.[staffPartID]=c.[staffPartID]
重复项为b表的数据项,请问该如何让b表没有重复数据

------解决方案--------------------
select distinct(a.[StaffID]),b.[staffJob] ,c.[staffPart],
convert(varchar(100),a.[EmployTime],23) as [EmployTime]
from [Staffs]
as a,[staffJob] as b,[staffPart] as c
where a.[StaffID]=b.[StaffID] and a.[staffPartID]=c.[staffPartID]
and BINARY_CHECKSUM([staffJob],[staffPart]) in(
select BINARY_CHECKSUM([staffJob],[staffPart])
from staffPart
group by BINARY_CHECKSUM([staffJob],[staffPart]))
------解决方案--------------------
select distinct(a.[StaffID]),b.[staffJob] ,c.[staffPart],
convert(varchar(100),a.[EmployTime],23) as [EmployTime]
from [Staffs]
as a,[staffJob] as b,[staffPart] as c
where a.[StaffID]=b.[StaffID] and a.[staffPartID]=c.[staffPartID]
and BINARY_CHECKSUM([staffJob],[staffPart]) in(
select BINARY_CHECKSUM([staffJob],[staffPart])
from staffPart
group by BINARY_CHECKSUM([staffJob],[staffPart])
having count(*)=1)--取没有重复的
------解决方案--------------------
如果C表有多于一项满足a.[staffPartID]=c.[staffPartID],
那么B显示出来肯定会有重复,这也是正常合理的。

除非你愿意舍弃掉一些C表的记录
------解决方案--------------------
select distinct(a.[StaffID]),b.[staffJob] ,c.[staffPart],
convert(varchar(100),a.[EmployTime],23) as [EmployTime] from [Staffs]
as a,(select distinct * from [staffJob]) as b,[staffPart] as c where a.[StaffID]=b.[StaffID] and a.[staffPartID]=c.[staffPartID]


这样看看?