Encore un problème de doublons

Encore un problème de doublons - SQL/NoSQL - Programmation

Marsh Posté le 03-12-2009 à 12:33:48    

Voilà, je bosse en SQL avec PhpMyAdmin.
 
J'ai une grosse table et rien que ça.
 
En faisant un truc du genre:

Code :
  1. SELECT DISTINCT upper(last_name), upper(first_name)  FROM visitors


 
Je me retrouve avec une belle table sans doublons.
En effet, en utilisant upper (ou lower), j'enlève (enfin je pense) un problème de casse, ce qui me permet de vraiment enlever tous les doublons.
 
Cependant, j'aimerais pouvoir faire une requête qui m'affiche tous les champs en doubles et pas les champs qui ne sont pas en double.
 
Je cherche à avoir cette base pour que je puisse bosser dessus et la nettoyer... manuellement.
 
Je reconnais ne pas avoir trop d'idées...
 
Si vous avez de quoi m'aider, d'avance... MERCI !!!!

Reply

Marsh Posté le 03-12-2009 à 12:33:48   

Reply

Marsh Posté le 03-12-2009 à 13:58:21    

select upper(last_name), upper(first_name), count(identifiaint)
from latable
group by upper(last_name), upper(first_name)
having count(identifiant) > 1

Reply

Marsh Posté le 03-12-2009 à 14:48:17    

Cette requête n'est pas mal du tout. Fallait y penser, moi je n'aurais pas pu  ;)  
 
Mais elle ne fait pas exactement ce dont j'ai besoin.
En effet, elle m'indique pour chaque enregistrement le nombre d'enregistrement identique (2,3,4,...)
 
Exemple,  
Pierre Dupon - 3
Paul Jacques - 2
Francis Lalane - 7 ;-)
 
J'aimerais avoir toutes les infos de ces différents doublons. (comme la société, la ville,...)
Pour exemple, pouvoir voir les 3 enregistrements Pierre Dupon pour que je puisse voir lequel est le bon, et lesquelles je peux supprimer.
Et ce, en fonction d'élément en plus, comme la ville et la société.
 
Ce n'est pas grand chose, mais voici la base du code reçu par Fred999 (merci à lui) avec ville et société... Peut-être que ça vous aidera un tout petit peu à m'aider  
 

Code :
  1. select upper(last_name), upper(first_name), societe, ville, count(identifiant) from latable group by upper(last_name), upper(first_name) having count(identifiant) > 1


 
Encore merci d'avance
 

Reply

Marsh Posté le 03-12-2009 à 15:08:49    

Tu peux toujours rajouter société et ville dans la clause GROUP BY pour affiner les résultats (dans le premier post, tu ne parles que de nom et prénom).
 
Sinon, c'est à toi de partir de la liste des doublons (nom, prénom) pour ensuite effectuer le traitement élément par élément...

Reply

Marsh Posté le 03-12-2009 à 15:12:14    

Fred999 a écrit :

Sinon, c'est à toi de partir de la liste des doublons (nom, prénom) pour ensuite effectuer le traitement élément par élément...


Ou tout seulement la jouer barbare avec un select * from ttruc where id in (select...)...mais c'est laid.[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-12-2009 à 15:14:02    

Il n'y a donc pas de réelle méthode pour sortir uniquement les éléments en double d'une DB ? (en laissant les éléments unique de coté)

Reply

Marsh Posté le 03-12-2009 à 15:17:16    

skeye > ouais c'est ce que je voulais dire :o
 
Tout dépend de ce que tu appelles "élément" : i.e. comment tu définis l'unicité dans ta table, il n'y a pas de règle en la matière : comme on l'a dit, au début tu ne parles que de nom/prénom, ensuite tu parles de nom/prénom/société/ville. Ce n'est pas la même chose.
 
Pour blinder le truc à l'avenir, je te conseille d'effectuer un contrôle sur l'unicité AVANT l'insertion ; mais bon, je suppose que tu as récupéré le truc tel quel...

Reply

Marsh Posté le 03-12-2009 à 15:32:39    

jedijul a écrit :

Il n'y a donc pas de réelle méthode pour sortir uniquement les éléments en double d'une DB ? (en laissant les éléments unique de coté)


En général si t'as des éléments réellement en double c'est que tu t'es planté à la conception de la base. Avoir deux fois exactement la même info n'a pas d'intérêt.
 
...et si, il y en a, cf la requête de fred999.


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed