Finn dupliserte rader i Oracle -databasen

Finn dupliserte rader i Oracle -databasen

Når du jobber med databaser, møter du ofte forekomster der du trenger å finne dupliserte rader i en gitt databasetabell. Å finne duplikater kan tillate deg å bestemme forholdet mellom identiske verdier og alle verdiene i tabellen.

Du kan deretter bruke informasjonen som er samlet til å handle, for eksempel å fjerne duplikatverdier eller flytte dem til et midlertidig bord osv.

I dette innlegget lærer vi hvordan vi kan finne dupliserte verdier i en Oracle -tabell ved hjelp av Oracle Aggregate eller Analytic Functions.

Sette opp eksempeltabell og data

La oss sette opp en eksempeldata for illustrasjonsformål for å forstå hvordan vi bruker Oracle -funksjonene for å finne dupliserte verdier.

Hvis du har en eksisterende bord du ønsker å bruke, kan du hoppe over denne delen. Ellers kjører uttalelsen nedenfor for å opprette en eksempeltabell:

Lag tabellbestillinger_informasjon
(
ID -nummer ikke null,
Kunden varchar2 (50) ikke null,
ordre_dato dato,
PRODUKT_ID NUMMER,
mengde nummer,
Prisnummer,
Begrensningsordre_info_pk Primærnøkkel (ID)
);

Deretter legger du til prøvedata med dupliserte verdier som vist:

Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (1, 'Beatriz', dato '2022-10-10', 4500, 45, 56);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (2, 'Ali', dato '2022-10-10', 5400, 65, 109);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (3, 'Gabriel', dato '2022-10-11', 6400, 405, 586);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (4, 'Beatriz', dato '2022-10-11', 5800, 55, 550);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (5, 'Beatriz', dato '2022-10-12', 4506, 46, 700);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (6, 'Gabriel', dato '2022-10-11', 9001, 450, 5600);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (7, 'Beatriz', dato '2022-10-10', 4500, 45, 56);
Sett inn bestillinger_informasjon (id, kunde, ordre_date, produkt_id, mengde, pris)
verdier (8, 'Ali', dato '2022-10-10', 5400, 65, 109);

Når tabell- og eksempeldataene er klare, kan vi lære hvordan du finner duplikatrappene.

Oracle Finn dupliserte rader - Analytisk funksjon

I Oracle kan vi bruke Count () -funksjonen i forbindelse med over og partisjon etter klausul for å bestemme antall dupliserte poster i en gitt tabell.

Ta eksemplet som er vist nedenfor.

Velg bestillinger.*, count (*) over (partisjon etter kunde, ordre_date) number_of_occurence
fra bestillinger_informasjonsordrer;

Spørringen over skal returnere raden og antall ganger den oppstår i tabellen som vist:

For å få bare postene som vises mer enn en gang, kan vi bruke en WHERE -klausul som:

med item_count som (velg ordrer.*, count (*) over (partisjon etter kunde, ordre_date) number_of_occurence
fra bestillinger_informasjonsordrer)
plukke ut *
Fra Item_Count
hvor number_of_occurence> 1;

Produksjon:

Oracle Finn dupliserte verdier - Aggregate Function

En annen metode vi kan bruke for å finne dupliserte poster i en tabell er gruppen etter klausul. Vi kan deretter bestemme antall ganger en gitt post skjer i hver gruppe ved å bruke telling () -funksjonen. Hvis en rad vises mer enn en gang, er det en duplikat.

Et eksempel er som vist:

plukke ut *
fra ordrer_informasjon
hvor (kunde, ordre_date) i
(Velg kunde, ordre_date fra ordrer_informasjonsgruppe av kunde, ordre_date å ha telling (*)> 1)
bestill av kunde, ordre_date;

Den resulterende informasjonen er som vist:

Som vi kan se, lar spørringen oss få dupliserte rader fra måltabellen.

Konklusjon

I denne opplæringen oppdaget du to hovedmetoder for å bestemme dupliserte rader fra en gitt database.