Database
 sql >> Base de données >  >> RDS >> Database

Comment éliminer les lignes en double dans SQL

Problème :

Vous souhaitez éliminer les lignes en double du jeu de résultats d'une requête afin que chaque ligne n'apparaisse qu'une seule fois.

Exemple :

Notre base de données a une table nommée clothes avec des données dans les colonnes suivantes :id , name , color , et year_produced .

identifiant nom couleur année_produite
1 T-shirt jaune 2015
2 veste bleu 2016
3 jeans noir 2015
4 veste bleu 2015
5 veste vert 2016
6 veste jaune 2017
7 chapeau jaune 2017

Obtenons les noms et couleurs non répétés des vêtements produits avant 2017.

Solution :

SELECT DISTINCT name,
  color
FROM clothes
WHERE year_produced < 2017;

Voici le résultat :

nom couleur
T-shirt jaune
veste bleu
jeans noir
veste vert

Notez que le bleu n'apparaît qu'une seule fois dans ce jeu de résultats, même s'il apparaît deux fois dans le tableau d'origine. En effet, nous avons spécifié que nous voulions sélectionner uniquement les lignes pour lesquelles la combinaison nom-couleur est unique.

Discussion :

Utilisez simplement le DISTINCT mot-clé après SELECT si vous souhaitez sélectionner uniquement des lignes non répétées. Ce mot-clé force la requête à supprimer toutes les lignes en double, en se basant uniquement sur les colonnes que vous avez répertoriées.

Voici un exemple de sélection des lignes pour lesquelles le nom de l'élément est unique :

SELECT DISTINCT name
FROM clothes
WHERE year_produced < 2017;

Contrairement à la requête précédente, celle-ci ne renvoie que trois enregistrements :

nom
T-shirt
jeans

Alors qu'il y a quatre jeans dans le tableau d'origine (deux bleus, un vert et un jaune), l'article n'apparaît qu'une seule fois dans cet ensemble de résultats grâce au DISTINCT mot-clé.