Dans une table [membre], certaines lignes ont la même valeur pour la colonne email
.
login_id | email
---------|---------------------
john | [email protected]
peter | [email protected]
johnny | [email protected]
...
Certaines personnes ont utilisé un identifiant de connexion différent mais la même adresse électronique. Aucune contrainte unique n'a été définie pour cette colonne. Maintenant, je dois trouver ces lignes et voir si elles doivent être supprimées.
Quelle instruction SQL dois-je utiliser pour trouver ces lignes? (MySQL 5)
Cette requête vous donnera une liste d'adresses e-mail et le nombre de fois qu'elles ont été utilisées, en commençant par les adresses les plus utilisées.
SELECT email,
count(*) AS c
FROM TABLE
GROUP BY email
HAVING c > 1
ORDER BY c DESC
Si vous voulez les lignes complètes:
select * from table where email in (
select email from table
group by email having count(*) > 1
)
select email from mytable group by email having count(*) >1
Voici la requête pour trouver les email
qui sont utilisés depuis plus d'un login_id
:
SELECT email
FROM table
GROUP BY email
HAVING count(*) > 1
Vous aurez besoin d'une seconde requête (de la requête imbriquée) pour obtenir la liste de login_id
par email
.
La première partie de la réponse acceptée ne fonctionne pas pour MSSQL.
Cela a fonctionné pour moi:
select email, COUNT(*) as C from table
group by email having COUNT(*) >1 order by C desc
utilisez ceci si votre colonne email contient des valeurs vides
select * from table where email in (
select email from table group by email having count(*) > 1 and email != ''
)
Je sais que c’est une très vieille question, mais c’est davantage pour quelqu'un d’autre qui pourrait avoir le même problème et je pense que c’est plus précis par rapport à ce qui était recherché.
SELECT * FROM member WHERE email = (Select email From member Where login_id = [email protected])
Tous les enregistrements contenant [email protected] comme valeur login_id seront renvoyés.
Merci les gars :-) J'ai utilisé ce qui suit parce que je ne m'intéressais qu'à ces deux colonnes et pas tellement au reste. A bien fonctionné
select email, login_id from table
group by email, login_id
having COUNT(email) > 1
Obtenez l'enregistrement complet à votre guise à l'aide de la condition avec la requête de sélection interne.
SELECT *
FROM member
WHERE email IN (SELECT email
FROM member
WHERE login_id = [email protected])