Как найти повторяющиеся значения в таблице в Oracle? - PullRequest
254 голосов
/ 12 сентября 2008

Какой самый простой оператор SQL, который будет возвращать повторяющиеся значения для данного столбца и количество их вхождений в таблицу базы данных Oracle?

Например: у меня есть таблица JOBS со столбцом JOB_NUMBER. Как я могу узнать, есть ли у меня дубликаты JOB_NUMBER с и сколько раз они дублируются?

Ответы [ 13 ]

1 голос
/ 24 октября 2017

Я обычно использую Oracle Analytic , функцию ROW_NUMBER () .

Допустим, вы хотите проверить наличие дубликатов в отношении уникального индекса или первичного ключа, построенного на столбцах (c1, c2, c3). Затем вы пойдете этим путем, получив ROWID s строк, где число строк, принесенных ROW_NUMBER(), равно >1:

Select * From Table_With_Duplicates
      Where Rowid In
                    (Select Rowid
                       From (Select Rowid,
                                    ROW_NUMBER() Over (
                                            Partition By c1 || c2 || c3
                                            Order By c1 || c2 || c3
                                        ) nbLines
                               From Table_With_Duplicates) t2
                      Where nbLines > 1)
0 голосов
/ 10 февраля 2016

1. решение

select * from emp
    where rowid not in
    (select max(rowid) from emp group by empno);
0 голосов
/ 27 января 2016

Также вы можете попробовать что-то вроде этого, чтобы перечислить все повторяющиеся значения в таблице, скажем, reqitem

SELECT count(poid) 
FROM poitem 
WHERE poid = 50 
AND rownum < any (SELECT count(*)  FROM poitem WHERE poid = 50) 
GROUP BY poid 
MINUS
SELECT count(poid) 
FROM poitem 
WHERE poid in (50)
GROUP BY poid 
HAVING count(poid) > 1;
...