sql eliminare - Come posso trovare valori duplicati in una tabella in Oracle?




6 Answers

select column_name, count(column_name)
from table
group by column_name
having count (column_name) > 1;
record query

Qual è l'istruzione SQL più semplice che restituirà i valori duplicati per una determinata colonna e il conteggio delle loro occorrenze in una tabella di database Oracle?

Ad esempio: ho una tabella JOBS con la colonna JOB_NUMBER . Come faccio a sapere se ho JOB_NUMBER duplicati e quante volte sono duplicati?




Il più semplice mi viene in mente:

select job_number, count(*)
from jobs
group by job_number
having count(*) > 1;



Che ne dite di:

SELECT <column>, count(*)
FROM <table>
GROUP BY <column> HAVING COUNT(*) > 1;

Per rispondere all'esempio sopra, sembrerebbe:

SELECT job_number, count(*)
FROM jobs
GROUP BY job_number HAVING COUNT(*) > 1;



fare

select count(j1.job_number), j1.job_number, j1.id, j2.id
from   jobs j1 join jobs j2 on (j1.job_numer = j2.job_number)
where  j1.id != j2.id
group by j1.job_number

ti darà gli id ​​delle righe duplicate.




Di solito uso la funzione analitica Oracle ROW_NUMBER() .

Supponiamo che tu voglia controllare i duplicati che hai riguardo a un indice univoco o a una chiave primaria costruita su colonne ( c1 , c2 , c3 ). Quindi andrai in questo modo, facendo apparire ROWID s di righe in cui il numero di righe portato da 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)



1. soluzione

select * from emp
    where rowid not in
    (select max(rowid) from emp group by empno);



Related