oracle duplicate rows based on a single column

﹥>﹥吖頭↗ 提交于 2019-12-24 06:06:26

问题


How can I find out duplicate rows based on a single column. I have a table in oracle which has data as given below and it has duplicates. I'm trying to select and view all rows with duplicate employee ids as explained below

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

From the above table i want to select all rows which duplicate empids such as below

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

How can I do this? thank you!


回答1:


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

Another way, although I prefer above, is to use IN

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



回答2:


Here's another option using a subquery and COUNT OVER PARTITION BY since you're using Oracle 11:

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 Demo (Borrowed from JW)



来源:https://stackoverflow.com/questions/16291075/oracle-duplicate-rows-based-on-a-single-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!