Question simple sur les DOUBLONS...

Question simple sur les DOUBLONS... - SQL/NoSQL - Programmation

Marsh Posté le 21-12-2005 à 17:30:53    

Bonjour. comment virer les doublons d'une table ? je ne sais pas faire...
Z'auriez un tuto, un exemple ?  
merci


---------------
http://www.ypikay.com
Reply

Marsh Posté le 21-12-2005 à 17:30:53   

Reply

Marsh Posté le 21-12-2005 à 17:42:28    

tu fais une requete qui ira deleter toutes les lignes avec la même clé primaire (id) :
 
DELETE FROM Table WHERE id IN (SELECT id, Count(*) FROM Table GROUP BY champ2, champ3, champ4 HAVING Count(*) > 1)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-12-2005 à 17:45:15    

sinon je peux faire avec le champ que je veux virer si il est double mais que la clé primaire est differente ?


---------------
http://www.ypikay.com
Reply

Marsh Posté le 21-12-2005 à 17:52:56    

moi j'appelle pas ça un doublon personnellement... un doublon au sens SGBD du terme est un enregistrement qui contient la même clé primaire qu'un autre enregistrement (ce qui est normalement impossible, mais certains SGBD sont assez capricieux quand ils plantent).
si tu veux effacer 2 lignes identiques avec une clé primaire différente, alors tu peux utiliser cette requete (id1 et id2 sont les clés primaires de tes enregistrements à virer)
DELETE FROM Table WHERE id IN (id1, id2)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-12-2005 à 17:53:56    

voila un excellent article sur le sujet : http://sqlpro.developpez.com/cours/doublons/ :)

Reply

Marsh Posté le 21-12-2005 à 20:14:18    

harko > ton truc il est sympa, mais après, les doublons sont plus que dédoublonnés, y'en a plus un seul exemplaire après :D

Reply

Marsh Posté le 21-12-2005 à 20:17:25    

Code :
  1. delete latable
  2. where id in
  3. (
  4.    select latable2.id
  5.    from latable2
  6.    where id not in (select min(id) from latable latable1 where latable1.champ = latable2.champ)
  7. )


 
Ca ça devrait ne conserver que les lignes de plus petits ID pour les lignes en doublon.

Reply

Marsh Posté le 21-12-2005 à 22:55:46    

Ah ouais tiens je vais essayer...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 22-12-2005 à 07:41:15    

Arjuna a écrit :

Code :
  1. delete latable
  2. where id in
  3. (
  4.    select latable2.id
  5.    from latable2
  6.    where id not in (select min(id) from latable latable1 where latable1.champ = latable2.champ)
  7. )


 
Ca ça devrait ne conserver que les lignes de plus petits ID pour les lignes en doublon.


Et pourquoi pas :

Code :
  1. delete latable
  2. where id NOT IN (select min(id) from latable latable1 where latable1.champ = latable2.champ);

Reply

Marsh Posté le 22-12-2005 à 09:13:46    

en effet :D

Reply

Sujets relatifs:

Leave a Replay

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