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

Supprimer les lignes en double de la table avec jointure

Si vous souhaitez supprimer la ville en double avec le même state_id (enregistrements en double), vous pouvez le faire en les regroupant par city et state_id et en utilisant MIN ou MAX fonction :

Avant de supprimer la requête, votre table ressemblait à

| ID | STATE_ID |       CITY |
------------------------------
|  1 |        1 |   city_one |
|  2 |        1 |   city_two |
|  3 |        1 |   city_one |
|  4 |        1 |   city_two |
|  5 |        2 |   city_one |
|  6 |        3 | city_three |
|  7 |        3 |   city_one |
|  8 |        3 | city_three |
|  9 |        4 |  city_four |
| 10 |        4 |  city_five |

Vous pouvez utiliser la requête suivante pour supprimer les enregistrements en double :

DELETE city_table 
  FROM city_table
  LEFT JOIN 
  (SELECT MIN(id) AS IDs FROM city_table
   GROUP BY city,state_id
  )A
  ON city_table.ID = A.IDs
  WHERE A.ids IS NULL;

Après avoir appliqué la requête ci-dessus, votre tableau ressemblera à :

| ID | STATE_ID |       CITY |
------------------------------
|  1 |        1 |   city_one |
|  2 |        1 |   city_two |
|  5 |        2 |   city_one |
|  6 |        3 | city_three |
|  7 |        3 |   city_one |
|  9 |        4 |  city_four |
| 10 |        4 |  city_five |

Voir ce SQLFiddle

Pour plus d'informations, voir DELETE Syntaxe de MySQL.