查找DB2中多行的重复项

时间:2013-02-19 17:15:24

标签: sql

我有一个表可以存在可以跨越多行的重复项。

例如,让Employee表与department。

DEPTId  Name   SALARY 

1       TOM     121

1       MARK    21

1       SALLIE  34

2       JAY     342

2       BRITNEY 3

3       TOM     121 

3       MARK    21 

3       SALLIE  34 

4       MARK    21 

4       SALLIE  34 

5       MARK    21 

5       SALLIE  34

5       TOM     121 

5       BRITNEY 3 

当我将DeptId传递为3时,我需要获得DeptId 1,因为3基本上与1相同。

5与1不同,因为它有更多行。所有行匹配&那是重复的。

我可以知道如何使用单个查询找到它吗?

1 个答案:

答案 0 :(得分:0)

您正在尝试比较集合中的两个集合(部门内的员工)。

基于集合的方法是在表上进行自联接,由员工进行匹配。下一组由两个部门组成。如果两个部门有相同的员工,那么所有员工都会匹配。也就是说,不存在一个部门的员工与另一个部门的员工不匹配的情况。

having子句测试此条件。

此版本的查询使用驱动程序表将部门与员工进行匹配。当集合不匹配时,完整的外部联接将具有不匹配的行,该行在having子句中被选中:

select driver.deptid1, driver.deptid2
from (select d1.deptid as deptid1, d2.deptid as deptid2
      from (select distinct deptid from employees) d1 cross join
           (select distinct deptid from employees) d2
     ) driver left outer join
     employees e1
     on e1.deptid = driver.deptid full outer join
     employees e2
     on driver.deptid2 = e2.deptid and e1.name = e2.name and e1.salary = e2.salary
group by driver.deptid1, driver.deptid2
having SUM(case when e1.name is null then 1 else 0 end) = 0 and
       SUM(case when e2.name is null then 1 else 0 end) = 0