基于单列的Oracle重复行

3

如何基于单个列查找重复行。我有一个在Oracle中的表,它的数据如下所示,并且有重复项。我试图选择和查看所有具有重复员工ID的行,如下所述。

雇员表(EMP table):

EmpId Fname Lname Mname Jobcode Status exp_date

1      Mike Jordan A    IT      W      12/2014
1      Mike Jordan A    IT      A      12/2014
2      Angela ruth C    sales   P      12/2015
2      Angela ruth C    IT      W      12/2015
3      Kelly  Mike B    sales   W      12/2015

从上表中,我想选择所有重复的empids行,如下所示:
EmpId Fname Lname Mname Jobcode Status exp_date

1      Mike Jordan A    IT      W      12/2014
1      Mike Jordan A    IT      A      12/2014
2      Angela ruth C    sales   P      12/2015
2      Angela ruth C    IT      W      12/2015

我该如何做到这一点?谢谢!

2个回答

8
SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  EmpID
            FROM    TableName
            GROUP   BY EmpID
            HAVING  COUNT(*) > 1
        ) b ON a.EmpID = b.EmpID

另一种方法,虽然我更喜欢以上的方法,是使用 IN

SELECT  a.*
FROM    TableName a
WHERE   EmpId IN
        (
            SELECT  EmpId
            FROM    TableName
            GROUP   BY EmpId
            HAVING  COUNT(*) > 1
        ) 

非常感谢。现在,你能告诉我你是如何提高你的SQL技能的吗?我想像你一样。 - user1751356

2

如果您使用的是 Oracle 11,可以使用子查询和 COUNT OVER PARTITION BY 来实现另一种选项:

SELECT * 
FROM (
  SELECT EmpId, Fname, Lname, Mname, Jobcode, Status, exp_date,
    COUNT(EmpId) OVER (PARTITION BY EmpId) EmpCount
  FROM    TableName 
  ) T
WHERE EmpCount > 1

SQL Fiddle演示(借用自JW)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接