6
votes

Comment puis-je écrire une requête SQL pour détecter les touches primaires en double?

Supposons que je souhaite modifier la table de sorte que mes clés principales soient comme suit

user_id , rond , tournois_id

Il y a actuellement des doublons que je dois nettoyer. Quelle est la requête pour trouver tous les doublons?

Ceci est pour MySQL et j'aimerais voir des lignes en double


4 commentaires

De quel RDBMS s'agit-il? Et vous voulez voir les lignes en double ou juste les clés en double?


Votre table a-t-elle actuellement une clé primaire du tout? Si oui, qu'est-ce que c'est?


tbh vous ne pouvez pas avoir des touches primaires en double


@ f00 - qui est exactement la motivation de la question. L'OP est clair qu'ils devront nettoyer ces doublons avant d'impliquer la clé primaire souhaitée. Edit: Oh je vois ce que tu veux dire. Vient de remarquer le titre.


4 Réponses :


9
votes

Techniquement, vous n'avez pas besoin d'une telle requête; Tout RDBMS vaut son sel ne permettra pas l'insertion d'une ligne qui produirait une clé primaire en double dans la table. Une telle chose violent la définition même d'une clé primaire.

Cependant, si vous souhaitez écrire une requête pour trouver des doublons de ces groupes de colonnes avant appliquer une clé primaire sur la table qui consiste de ces colonnes, c'est ce que vous voudriez: xxx

Ce qui précède ne vous donnera que la combinaison de colonnes qui ont plus d'une ligne pour cette combinaison, si vous Voulez-vous voir toutes les colonnes dans les lignes, alors vous effectuez les suivantes: xxx

Notez que vous pouvez également créer un Table temporaire et inscrivez-vous à ce sujet si vous devez utiliser les résultats plusieurs fois. < / p>


0 commentaires

2
votes
name         counter
----         -------
John Doe           2

0 commentaires

0
votes

En supposant que vous avez une table avec ces trois colonnes ou que vous pouvez faire et remplir une table avec ces trois colonnes, cette requête montrera les duplicats.

select user_id, round, tournament_id
from yourtable
group by user_id, round, tournament_id
having count(*) > 1


0 commentaires

0
votes

Cette requête sélectionne toutes les lignes de la table des clients disposant d'un nom en double mais indique également l'email de chaque duplicata.

SELECT c.name, c.email FROM customers c, customers d
WHERE c.name = d.name
GROUP BY c.name, c.email
HAVING COUNT(*) > 1


0 commentaires