IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête qui retire les doublons en fonctions de 3 clefs primaires. [AC-97]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut Requête qui retire les doublons en fonctions de 3 clefs primaires.
    Bonjour,

    Je dispose d'une table a laquelle j'aimerais mettre trois clefs primaires (3 champs). Mais Access refuse de le faire tant qu'il resteras des doublons sur ces trois champs dans ma table. Donc voila, j'aimerais créer une requête qui retire les doublons de ma table en fonction de 3 champs (Nom, Version, Env).

    Si vous avez des idées, merci de vos réponses !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 744
    Points : 57 559
    Points
    57 559
    Billets dans le blog
    42
    Par défaut
    bonsoir Jazz_,

    ce genre de doublons est assez simple à détecter :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Nom, Version, Env, COUNT(*) AS NbrDoublons
    FROM   LaTable
    GROUP  BY Nom, Version, Env
    HAVING COUNT(*) > 1 ;

    Par contre, pour supprimer les lignes en surplus il y a plusieurs méthodes possibles.

    Par exemple si la table comporte en plus une date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LaTable :
    Nom   Version  Env   Date
     X       Y      Z    11/10/2010
     X       Y      Z    12/10/2010
     X       Y      Z    15/10/2010
    Nous avons un champ discriminant pour ne retenir que la ligne correspondant à la date la plus récente correspondant à notre besoin (par exemple).

    Est-ce que la table possède au moins un autre champ de ce genre ou alors elle ne comporte que les 3 seuls champs Nom, version, env ?

  3. #3
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut
    Bonjour f-leb,
    Merci de ta réponse !

    Oui ma table contient d'autres champs, notamment des dates (Arrivée et Sortie sont les noms des champ de type date de ma table.)
    Mais aussi d'autres champs, qui sont des champs de texte. cela dit il peut arriver qu'ils ne soient pas tous référencé, ce qui m'amène a parler du champ "id" qui est un nombre et qui est référencé et unique pour chaque record. Peut être peut t'on utiliser ce champ comme discriminant ? choisissant le plus petit ( par exemple )

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 744
    Points : 57 559
    Points
    57 559
    Billets dans le blog
    42
    Par défaut
    bonjour,

    je n'ai pas Access sous la main pour l'instant mais il me semble qu'il reconnnait le prédicat ANY:

    Essaye avec:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELETE * FROM LaTable T
       WHERE  T.Id < ANY (
                           SELECT T2.Id FROM LaTable T2
                              WHERE  T.id <> T2.id
                                 AND  T.Nom = T2.Nom
                                 AND  T.version = T2.version
                                 AND  T.Env = T2.Env
                         );

    fait une sauvegarde avant

  5. #5
    Membre habitué Avatar de Jazz_
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 290
    Points : 190
    Points
    190
    Par défaut
    Ca marche parfaitement.

    Bravo. Merci beaucoup ! Sujet resolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/10/2014, 15h18
  2. Une requête qui donne des doublons dans les résultats
    Par HDR_16 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/04/2014, 18h51
  3. Requête qui ignore les doublons
    Par Hypnocrate dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/11/2010, 20h24
  4. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13
  5. requête pour exclure les doublons.
    Par sam01 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2005, 19h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo