8
votes

MySQL: Enlevez les lignes de table en fonction des valeurs en double colonne?

J'ai une table avec colonne d'année et cette colonne ne doit pas avoir de valeurs en double. Donc, je me retrouve avec une table avec une seule année 2007 année, par exemple.

Alors, comment puis-je supprimer ces lignes qui ont une valeur de l'année en double?

merci


3 commentaires

Si vous avez par exemple 3 lignes en double jusqu'à l'année 2008, que vous décidez de supprimer?


Dupliquer de Stackoverflow.com/q/18932/80714 La réponse est claire et concise.


Ce n'est pas la même question


3 Réponses :


8
votes

Je pense que vous pourriez simplement essayer d'ajouter un index unique en utilisant Ignorer:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX `name` (`col1`, `col2`, `col3`);


1 commentaires

Merci parfaitement au travail, mais est-il possible de l'appliquer sur deux colonnes?



3
votes

La réponse acceptée fonctionne parfaitement, mais Ignore ID de mots-clés amorti ( source ), il ne fonctionnera pas après MySQL 5.6 (peut être).

Bien que alter Table est très facile et direct, mais maintenant La seule option consiste à créer une nouvelle table par une requête comme celle-ci: xxx

après que vous puissiez supprimer à votre table.

Ici, vous pouvez modifier la liste des colonnes dans groupe par en fonction de votre besoin (dans toutes les colonnes à une colonne, ou quelques colonnes qui avoir des valeurs dupliquées ensemble).

Ici, je veux aussi mentionner un point:

  1. Un index unique ne modifie pas la ligne de ligne si des colonnes (à partir de l'index, comme ici 3 colonnes) ont null comme valeur. Ex: null, 1, "Asdsa" peut être stocké deux fois
  2. de même manière si vous avez une colonne unique dans l'index unique, plusieurs lignes avec null valeurs (pour cette colonne) resteront dans le tableau
  3. Le point de plus avec Create Table est, il fonctionnera avec des valeurs nulles également.

0 commentaires

-1
votes

'Groupe par' ne fonctionne pas si des colonnes SELECT n'ont pas de dépendance sur les colonnes "Groupe par". Voir 'seul_full_group_by' sql_mode. Vous pouvez changer le SQL_MODE mais je n'ai pas pu faire cela avec Knex (mon orme). J'ai fini par faire le filtrage des résultats SQL renvoyés dans le code.


0 commentaires