2013-04-30 5 views
2

Как узнать повторяющиеся строки на основе одного столбца. У меня есть таблица в оракуле, которая имеет данные, приведенные ниже, и имеет дубликаты. Я пытаюсь выбрать и просмотреть все строки с одинаковыми идентификаторами сотрудников, как описано нижеОракул дублирует строки на основе одного столбца

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 

Из приведенных выше таблиц я хочу, чтобы выбрать все строки, которые дублируют 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 

Как это сделать? Спасибо!

ответ

5
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 
     ) 
+0

Большое спасибо. Теперь вы могли бы сообщить мне, как усовершенствовали свои навыки работы с sql. Я хочу быть как ты. – user1751356

+0

приветствуется ':)' –

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)