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

SQL Oracle Discussion :

Problème recup clef Primaire doublons


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Problème recup clef Primaire doublons
    Bonjour,

    Une partie de la question est dans le titre.
    j'ai une table A

    id clef primaire integer
    nom
    prenom
    email
    ...

    j'intègre mes données avec SQLloader
    donc pas de vérification des doublons.

    Je cherche grâce à une requête à récupérer sous forme de tableau les
    doublons en fonction des id.

    Pb :
    Si je fais select nom, prenom, count(*) from A group by nom,prenom
    having count(*)>1 je ne récupère que les noms et prenoms qui sont les doublons.
    C'est bien mais il faut que je fasse une autre requête pour récupérer
    chaque ligne id ??
    genre id
    10 -> 11
    12->40 etc ..
    dans le même ordre d'idée j'avais fais
    select A1.id,A2.id from A A1,A A2
    where
    A1.id != A2.id
    and A1.nom = A2.nom and A1.prenom = A2.prenom;

    Je me suis retrouvé avec
    10 -> 11
    11 -> 10
    25 -> 30
    30 -> 25 etc

    c'est plutôt bien mais ce qui me perturbe c'est comment utiliser le résultat
    dans une fonction ou procédure pour

    1 identifier la ou les lignes
    2 insérér les doublons dans une nouvelles tables.
    3 effacer les lignes en doublons ( toutes )

    exemple :
    lign 10 en doublon avec 11 donc j'insère 10 et 11
    dans une table tempo, et j'efface 10 et 11 de ma table.
    puis je passe à la suite.
    si je fais cela dans un curseur le résultat suivant sera 11
    en doublon avec 10 d'ou ma mon enchevètrement synaptique.

    bref, suis je clair .
    Si oui , bah t'en mieux
    sinon si quelqu'un à déjà eu ce genre de pb son avis sera le bien venu.

    Olivier

  2. #2

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le mieux ne serait-il pas de créer une clé unique sur ta table avec les champs nom / prenom. Du coup, avec SQL*Loader, ça bloque les doublons au chargement, tout simplement.

  4. #4
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Bonjour
    C'est exactement ce que je cherchais.
    J'avais déjà lu quelque part la réponse sans pouvoir
    l'interpréter correctement.
    Merci

  5. #5
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Si j'ai bien compris ton problème, tu as 2 étapes :
    1. Insertion des lignes en doublons dans une table destination
    2. Suppression des lignes en doublons dans la table d'origine
    Cela peut être fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    INSERT INTO TABLE_SAVE_DOUBLON
    SELECT Id1, Nom, Prenom, ...
    FROM TABLE_ORIGINE TO1
    WHERE EXISTS
    (SELECT 1 FROM TABLE_ORIGINE TO2 
     WHERE TO1.Nom = TO2.Nom
      AND TO1.Prenom = TO2.Prenom
     AND  TO1.ROWID <> TO2.ROWID)
     
    DELETE FROM TABLE_ORIGINE
    WHERE (Nom, Prenom) in (SELECT nom,prenom from TABLE_SAVE_DOUBLON)

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

Discussions similaires

  1. [AC-2003] Problème de clef primaire
    Par kt123456 dans le forum Modélisation
    Réponses: 5
    Dernier message: 25/07/2013, 11h13
  2. Problème contrainte clef primaire
    Par saiffadi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2012, 19h51
  3. Problème de clef primaire
    Par bigsister dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/01/2008, 18h46
  4. Gestion des erreurs (doublon clef primaire)
    Par capitaine dans le forum Access
    Réponses: 3
    Dernier message: 19/06/2006, 12h22
  5. Clef primaire access, Indexé avec doublon
    Par Asurmena dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 11h04

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