Supprimer les enregistrements uniques

Résolu
slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006 - 16 mars 2006 à 06:43
slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006 - 20 mars 2006 à 06:30
Salut J'ai une table avec des champs id, url, date, time
le champs id accept les doublons
je voudrai supprimer tout les enregistrements avec le id unique.
je ne sais pas comment le faire en sql
merci d'avance

slak

7 réponses

slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006
20 mars 2006 à 06:30
DELETE *
FROM matable
WHERE id IN (
SELECT id
FROM matable
GROUP BY (id)
HAVING COUNT(id) = 1);


cette requette marche a merveille


merci Mindiell ;)

slak
3
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
16 mars 2006 à 10:27
Ok,

un exemple de ce que je comprends, tu as :
id url date time
1 http 12/03 12:45
1 http 13/03 10:27
2 http 13/03 03:42

Tu veux éliminer une des deux première lignes pour que id soit sans doublon. Mais le plus important c'est de savoir laquelle des deux tu veux supprimer ! Ou si tu t'en fiches...
0
slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006
16 mars 2006 à 18:09
Non, je veux supprimer la troisieme ligne parce qu'elle est unique (orphelin), et je veux garder que les lignes qui ont des doublons.

merci

slak
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
17 mars 2006 à 08:36
Ok,

DELETE
FROM matable
GROUP BY (champ_unique)
HAVING COUNT(champ_unique) = 1

Remplace le DELETE par un SELECT * pour vérifier que c asélectionne bien les lignes que tu veux eliminer avant de les eliminer ;o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006
19 mars 2006 à 04:57
la requette marche si tu fais seulement un select sur le champs indiqué dans la requette
comme : SELECT id
FROM matable
GROUP BY (id)
HAVING COUNT(id) = 1

meme si je fais delete ca ne marche pas
le message d'erreur est : impossible d'effectuer un regroupement sur les champs selectione avec (*)
je crois qu'il faut faire deux requette

slak
0
slak Messages postés 10 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 20 mars 2006
19 mars 2006 à 04:59
delete from maTable where id = (select id from maTable group by id having count(id) = 1)
j'ai essayé comme ce n'est pas la bonne
slak
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
19 mars 2006 à 20:09
en 2 fois alors :
UPDATE matable
SET unchampspecial = 1
WHERE id IN (
SELECT id
FROM matable
GROUP BY (id)
HAVING COUNT(id) = 1)

Puis :
DELETE
FROM matable
WHERE unchampspecial = 1

avec "unchampspecial" un champ rajouté sur ta table juste pour la nettoyer...
0
Rejoignez-nous