sql >> Database >  >> RDS >> Database

Hoe dubbele waarden in een SQL-tabel te vinden

Over het algemeen is het de beste gewoonte om unieke beperkingen op een tabel te plaatsen om dubbele rijen te voorkomen. Het kan echter zijn dat u met een database werkt waarin dubbele rijen zijn gemaakt door menselijke fouten, een bug in uw toepassing of niet-gereinigde gegevens van externe bronnen. Deze tutorial leert je hoe je deze dubbele rijen kunt vinden.

Om dit te kunnen volgen, heeft u leestoegang tot uw database nodig en een tool om uw database te doorzoeken.

Dubbele criteria identificeren

De eerste stap is het definiëren van uw criteria voor een dubbele rij. Heeft u een combinatie van twee kolommen nodig om samen uniek te zijn, of zoekt u gewoon naar duplicaten in een enkele kolom? In dit voorbeeld zoeken we naar duplicaten in twee kolommen in onze tabel Gebruikers:gebruikersnaam en e-mailadres.

Schrijf een query om te controleren of er duplicaten zijn

De eerste query die we gaan schrijven is een eenvoudige query om te verifiëren of er inderdaad duplicaten in de tabel voorkomen. Voor ons voorbeeld ziet mijn vraag er als volgt uit:

SELECT username, email, COUNT(*)
FROM users
GROUP BY username, email
HAVING COUNT(*) > 1

HAVING is hier belangrijk omdat in tegenstelling tot WHERE , HAVING filters op geaggregeerde functies.

Als er rijen worden geretourneerd, betekent dit dat we duplicaten hebben. In dit voorbeeld zien onze resultaten er als volgt uit:

gebruikersnaam e-mail tel
Piet [email protected] 2
Jessica [email protected] 2
Mijlen [email protected] 2

Lijst alle rijen met duplicaten

In de vorige stap heeft onze query een lijst met duplicaten geretourneerd. Nu willen we het hele record voor elke dubbele rij retourneren.

Om dit te bereiken, moeten we de hele tabel selecteren en die toevoegen aan onze dubbele rijen. Onze zoekopdracht ziet er als volgt uit:

SELECT a.*
FROM users a
JOIN (SELECT username, email, COUNT(*)
FROM users 
GROUP BY username, email
HAVING count(*) > 1 ) b
ON a.username = b.username
AND a.email = b.email
ORDER BY a.email

Als je goed kijkt, zie je dat deze vraag niet zo ingewikkeld is. De eerste SELECT selecteert eenvoudig elke kolom in de gebruikerstabel en voegt deze vervolgens samen met de gedupliceerde gegevenstabel uit onze eerste query. Omdat we de tabel bij zichzelf voegen, is het nodig om aliassen te gebruiken (hier gebruiken we a en b) om de twee versies te labelen.

Zo zien onze resultaten eruit voor deze zoekopdracht:

id gebruikersnaam e-mail
1 Piet [email protected]
6 Piet [email protected]
12 Jessica [email protected]
13 Jessica [email protected]
2 Mijlen [email protected]
9 Mijlen [email protected]

Omdat deze resultatenset alle rij-ID's bevat, kunnen we deze gebruiken om de rijen later te ontdubbelen.


  1. Verbinding met SQL Server werkt soms

  2. Uw ultieme gids voor SQL Join:CROSS JOIN - Deel 3

  3. Een inleiding tot MySQL-gegevenstypen

  4. Nieuwe kolomwijzigingen met alleen metagegevens in SQL Server 2016