290 votes

Trouver les lignes qui ont la même valeur sur une colonne dans MySQL

Dans un tableau [membre], certaines rangées ont la même valeur pour la variable email colonne.

login_id | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
...

Certaines personnes ont utilisé un login_id différent mais la même adresse e-mail, aucune contrainte unique n'a été définie sur cette colonne. Je dois maintenant trouver ces lignes et voir si elles doivent être supprimées.

Quelle instruction SQL dois-je utiliser pour trouver ces lignes ? (MySQL 5)

4voto

Libertine Points 1

Merci les gars :-) J'ai utilisé la méthode ci-dessous car je ne me souciais que de ces deux colonnes et pas tellement du reste. Cela a bien fonctionné

  select email, login_id from table
    group by email, login_id
    having COUNT(email) > 1

3 votes

Dans le cas en question, COUNT(email) sera toujours égal à 1, donc votre requête ne retournera rien.

2 votes

Non, la requête m'a en fait fourni les données dont j'avais besoin, à savoir l'adresse électronique et le nom de connexion de ceux qui ont la même adresse électronique.

2 votes

Si vous regroupez par email y login_id, vous compterez le nombre de lignes pour le même email et le même login, et ceux-ci sont distincts dans votre exemple, donc le compte sera toujours de 1. Voici la manipulation de votre requête qui retourne 0 ligne : sqlfiddle.com/#!9/4bbcaf/3

4voto

Marc L Points 31

Je sais qu'il s'agit d'une très vieille question, mais je m'adresse plutôt à quelqu'un d'autre qui pourrait avoir le même problème et je pense que cela correspond mieux à ce qui était recherché.

SELECT * FROM member WHERE email = (Select email From member Where login_id = john123@hotmail.com) 

Ceci renverra tous les enregistrements qui ont john123@hotmail.com comme valeur de login_id.

4voto

Adeleye Ayodeji Points 64

Cela fonctionne mieux

Capture d'écran enter image description here

SELECT RollId, count(*) AS c 
    FROM `tblstudents` 
    GROUP BY RollId 
    HAVING c > 1 
    ORDER BY c DESC

3voto

Obtenez l'enregistrement entier comme vous le souhaitez en utilisant la condition avec la requête de sélection interne.

SELECT *
FROM   member
WHERE  email IN (SELECT email
                 FROM   member
                 WHERE  login_id = abcd.user@hotmail.com)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X