【问题标题】:oracle duplicate rows based on a single columnoracle基于单列重复行
【发布时间】:2013-04-30 02:03:17
【问题描述】:

如何根据单列找出重复的行。我在 oracle 中有一个表,其中包含如下所示的数据并且它有重复项。我正在尝试选择并查看具有重复员工 ID 的所有行,如下所述

EMP 表:

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

从上表中我想选择所有重复 empid 的行,如下所示

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

我该怎么做?谢谢!

【问题讨论】:

    标签: sql oracle11g duplicates


    【解决方案1】:
    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 技能的吗?我想和你一样。
    【解决方案2】:

    这是另一个使用子查询和COUNT OVER PARTITION BY 的选项,因为您使用的是 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(借自JW)

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 2018-05-08
      • 2022-01-24
      • 1970-01-01
      • 2015-04-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多