sql >> Database teknologi >  >> RDS >> Database

Hvordan finder man dublerede rækker i SQL?

Problem:

Du har dublerede rækker i din tabel, hvor kun ID'erne er unikke. Hvordan finder du disse duplikerede poster?

Eksempel:

Vores database har en tabel med navnet product med data i følgende kolonner:id , name og category .

id navn kategori
1 bøf kød
2 kage slik
3 d>bøf kød
4 svinekød kød
5 kage slik
6 kage slik

Lad os finde duplikerede navne og produktkategorier. Du kan finde dubletter ved at gruppere rækker ved at bruge COUNT aggregeret funktion og specificering af en HAVING klausul, som rækker skal filtreres med.

Løsning:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Denne forespørgsel returnerer kun duplikerede poster – dem, der har samme produktnavn og kategori:

navn kategori
bøf kød
kage slik

Der er to duplikerede produkter i vores tabel:bøf fra kødkategorien og kage fra slikkategorien. Det første produkt gentages to gange i tabellen, mens det andet vises tre gange.

Diskussion:

For at vælge dublerede værdier skal du oprette grupper af rækker med de samme værdier og derefter vælge grupperne med et antal større end én. Det kan du opnå ved at bruge GROUP BY og en HAVING klausul.

Det første trin er at oprette grupper af poster med de samme værdier i alle ikke-ID-kolonner (i vores eksempel, name og category ). Det gør du med en GROUP BY klausul. Efter GROUP BY nøgleord, sætter du navnene på de kolonner, du vil bruge til gruppering. Vi ekskluderer id kolonne, fordi det er vores tabels primære nøgle; pr. definition vil hver række have en anden værdi under den kolonne. Hvis vi skulle inkludere det, så ville vi ikke være i stand til at opdage dubletter!

Vi ønsker at finde grupper med mere end én række; sådanne grupper skal pr. definition indeholde en dublet, så længe vi har grupperet på de korrekte kolonner. For at gøre dette bruger vi en HAVING klausul. Betingelsen vi angiver er, at antallet af elementer i gruppen—COUNT(id) —skal være større end én:COUNT(id) > 1 . Husk at HAVING giver dig mulighed for at filtrere grupper; WHERE er til filtrering af individuelle rækker.


  1. Forår 2011 PostgreSQL-konferencer, USA/Canada

  2. 7 ting at vide om rum på Oracle Cloud Infrastructure

  3. YEARWEEK() Eksempler – MySQL

  4. SQL Server 2016:Ydeevnepåvirkning af altid krypteret