Il est facile de trouver des doublons avec un seul champ:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Donc, si nous avons une table
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Cette requête nous donnera John, Sam, Tom, Tom parce qu'ils ont tous la même chose email
.
Cependant, ce que je veux, c'est obtenir des doublons avec les mêmes email
et name
.
Autrement dit, je veux obtenir "Tom", "Tom".
La raison pour laquelle j'en ai besoin: j'ai fait une erreur et j'ai autorisé l'insertion de doublons name
et de email
valeurs. Maintenant, je dois supprimer / modifier les doublons, donc je dois d' abord les trouver .
sql
duplicates
Alex
la source
la source
name
champ dans SELECT.Réponses:
Regroupez simplement les deux colonnes.
Remarque: l'ancienne norme ANSI consiste à avoir toutes les colonnes non agrégées dans le GROUP BY, mais cela a changé avec l'idée de "dépendance fonctionnelle" :
Le support n'est pas cohérent:
sql_mode=only_full_group_by
:la source
>1
=1
essaye ça:
PRODUCTION:
si vous voulez que les ID des dups utilisent ceci:
PRODUCTION:
pour supprimer les doublons, essayez:
PRODUCTION:
la source
Essaye ça:
la source
Si vous souhaitez supprimer les doublons, voici une façon beaucoup plus simple de le faire que de trouver des lignes paires / impaires dans une triple sous-sélection:
Et ainsi supprimer:
Beaucoup plus facile à lire et à comprendre à mon humble avis
Remarque: le seul problème est que vous devez exécuter la demande jusqu'à ce qu'aucune ligne ne soit supprimée, car vous ne supprimez qu'un seul de chaque doublon à chaque fois
la source
You can't specify target table 'users' for update in FROM clause
Essayez ce qui suit:
la source
la source
Un peu tard pour la fête, mais j'ai trouvé une solution de contournement vraiment cool pour trouver tous les ID en double:
la source
GROUP_CONCAT
cela s'arrêtera après une durée prédéterminée, de sorte que vous pourriez ne pas obtenir tous lesid
s.essayez ce code
la source
Cela sélectionne / supprime tous les enregistrements en double, sauf un enregistrement de chaque groupe de doublons. Ainsi, la suppression laisse tous les enregistrements uniques + un enregistrement de chaque groupe de doublons.
Sélectionnez les doublons:
Supprimer les doublons:
Soyez conscient des quantités plus importantes d'enregistrements, cela peut entraîner des problèmes de performances.
la source
Dans le cas où vous travaillez avec Oracle, cette méthode serait préférable:
la source
la source
Si vous souhaitez voir s'il y a des lignes en double dans votre tableau, j'ai utilisé ci-dessous la requête:
la source
C'est la chose la plus simple que j'ai trouvée. Il utilise une expression de table commune (CTE) et une fenêtre de partition (je pense que ces fonctionnalités sont dans SQL 2008 et versions ultérieures).
Cet exemple recherche tous les élèves avec un nom et un ddb en double. Les champs dont vous souhaitez vérifier la duplication se trouvent dans la clause OVER. Vous pouvez inclure tout autre champ souhaité dans la projection.
la source
la source
Comment pouvons-nous compter les valeurs dupliquées ?? soit il est répété 2 fois ou supérieur à 2. il suffit de les compter, pas en groupe.
aussi simple que
la source
En utilisant CTE, nous pouvons également trouver une valeur en double comme celle-ci
la source
la source
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Je pense que cela fonctionnera correctement pour rechercher des valeurs répétées dans une colonne particulière.
la source
la source
Cela devrait également fonctionner, peut-être essayer.
Particulièrement bon dans votre cas Si vous recherchez des doublons qui ont une sorte de préfixe ou un changement général comme par exemple un nouveau domaine dans la messagerie. alors vous pouvez utiliser replace () dans ces colonnes
la source
Si vous souhaitez rechercher des données en double (selon un ou plusieurs critères) et sélectionner les lignes réelles.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
la source
la source
COUNT
sansGROUP BY
, sauf s'il fait référence à l'ensemble du tableau.Pour supprimer des enregistrements dont les noms sont en double
la source
Pour vérifier à partir d'un enregistrement en double dans un tableau.
ou
Pour supprimer l'enregistrement en double dans une table.
ou
la source
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
la source
Nous pouvons utiliser avoir ici qui fonctionnent sur des fonctions d'agrégation comme indiqué ci-dessous
Ici, deux champs id_account et data sont utilisés avec Count (*). Ainsi, il donnera à tous les enregistrements qui ont plus d'une fois les mêmes valeurs dans les deux colonnes.
Nous avons une raison erronée d'avoir manqué d'ajouter des contraintes dans la table SQL Server et les enregistrements ont été insérés en double dans toutes les colonnes avec l'application frontale. Ensuite, nous pouvons utiliser la requête ci-dessous pour supprimer la requête en double de la table.
Ici, nous avons pris tous les enregistrements distincts de la table d'origine et supprimé les enregistrements de la table d'origine. Encore une fois, nous avons inséré toutes les valeurs distinctes de la nouvelle table dans la table d'origine, puis supprimé la nouvelle table.
la source
Vous voudrez peut-être essayer ceci
la source
La chose la plus importante ici est d'avoir la fonction la plus rapide. Les indices des doublons doivent également être identifiés. L'auto-jointure est une bonne option mais pour avoir une fonction plus rapide, il est préférable de trouver d'abord les lignes qui ont des doublons, puis de se joindre à la table d'origine pour trouver l'id des lignes dupliquées. Enfin, triez par colonne, sauf id, pour avoir des lignes en double les unes à côté des autres.
la source
Vous pouvez utiliser le mot clé SELECT DISTINCT pour supprimer les doublons. Vous pouvez également filtrer par nom et placer tout le monde avec ce nom sur une table.
la source
Le code exact diffère selon que vous souhaitez également rechercher des lignes en double ou uniquement des identifiants différents avec le même e-mail et le même nom. Si id est une clé primaire ou a une contrainte unique, cette distinction n'existe pas, mais la question ne le précise pas. Dans le premier cas, vous pouvez utiliser le code donné dans plusieurs autres réponses:
Dans ce dernier cas, vous utiliseriez:
la source