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 de détection de doublons


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut Problème de détection de doublons
    Bonjour à tous,

    Cela fait deux jours que je cherche une requête pour détecter des doublons dans ces tables:

    TN_DOCUMENTATION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    TABLE TN_DOCUMENTATION
    (
      OBJECT_ID              NUMBER(10),
      CLASS_ID               NUMBER(5),
      CN_ID                  VARCHAR2(50 BYTE),
      REVISION               VARCHAR2(10 BYTE),
      STATE                  NUMBER(10),
      CREATION_DATE          DATE,
      CN_DESCRIPTION         VARCHAR2(255 BYTE),
      PHASE                  NUMBER(10),
      PAR_REVISION           VARCHAR2(10 BYTE),
      APPROVAL_DATE          DATE,
      EFFECTIVE_FROM         DATE,
      EFFECTIVE_UNTIL        DATE,
      UNDER_OPERATION        NUMBER(5),
      USER_OBJECT_ID         NUMBER(10),
      REVISION_STG           NUMBER(10),
      USER_ID_MOD            NUMBER(10),
      MODIFICATION_DATE      DATE,
      TDM_ORG_USER_ID        NUMBER(10),
      TDM_APPROVED_BY        NUMBER(10),
      TDM_ORG_CREATEDATE     DATE,
      CN_COMMENT             CLOB,
      CN_SERVICE             NUMBER(10),
      CN_DEPARTEMENT         NUMBER(10),
      CN_TYPE_DOCUMENT       NUMBER(10),
      CN_CALIBRE             VARCHAR2(5 BYTE),
      CN_CLES                VARCHAR2(250 BYTE),
      CN_CTRL_ACCES          NUMBER(10),
      CN_CLIENT              NUMBER(10),
      CN_NOM_AVANT_PROJET    VARCHAR2(20 BYTE),
      CN_REF                 VARCHAR2(20 BYTE),
      CN_ECHANGE_INFOS       VARCHAR2(120 BYTE),
      CN_DATE_DU_TRANSFERT   DATE,
      CN_ORDRE_TRANSFERT     NUMBER(10),
      CN_SITE_ISA            NUMBER(10),
      CN_COMPTEUR_DOCUMENTS  VARCHAR2(20 BYTE),
      CN_FEAT_ID             VARCHAR2(127 BYTE),
      TDM_SUPPORTED_CLB      NUMBER(10)
    )
    TN_CATIA_PART
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    TABLE TN_CATIA_PART
    (
      OBJECT_ID                NUMBER(10), FK DE TN_DOCUMENTATION
      CN_PART_NUMBER           VARCHAR2(28 BYTE),
      CN_NUM_PLAN       NUMBER(10),
      CN_CODE_PROJET           NUMBER(10),
      CN_CODE_SOUS_PROJET      VARCHAR2(4 BYTE),
      CN_TITLE                 VARCHAR2(255 BYTE),
      CN_CONFIGURATION         VARCHAR2(40 BYTE),
      CN_PAGE_SIZE             NUMBER(10),
      CN_SCALE                 VARCHAR2(20 BYTE),
      CN_UM                    VARCHAR2(20 BYTE),
      CN_DEFINITION            VARCHAR2(50 BYTE),
      CN_NOMENCLATURE          VARCHAR2(120 BYTE),
      CN_DESCRIPTIONREF        VARCHAR2(65 BYTE),
      CN_SOURCE                VARCHAR2(20 BYTE),
      CN_MATERIAL              VARCHAR2(32 BYTE),
      CN_TYPE_DE_DOCUMENT      VARCHAR2(20 BYTE),
      CN_NORME                 VARCHAR2(20 BYTE),
      FILE_TYPE                NUMBER(10),
      FILE_NAME                VARCHAR2(255 BYTE),
      DIRECTORY                VARCHAR2(255 BYTE),
      CAD_REF_FILE_NAME        VARCHAR2(255 BYTE),
      CAD_REF_DIRECTORY        VARCHAR2(255 BYTE),
      VAULT_OBJECT_ID          NUMBER(10),
      TDM_CAD_DIRTYFLAG        NUMBER(10),
      CN_MASS                  VARCHAR2(50 BYTE),
      CN_VOLUME                VARCHAR2(50 BYTE),
      CN_SURFACE               VARCHAR2(50 BYTE),
      CN_MATIERE               VARCHAR2(100 BYTE),
      CN_CODE_PRODUIT          VARCHAR2(5 BYTE),
      CN_NUM_ISA               VARCHAR2(5 BYTE),
      CN_TYPE_PLAN             NUMBER(10),
      CN_MAT                   NUMBER(10),
      CN_STATUT_DOCUMENT       NUMBER(10),
      CN_INDICE_MANUEL         VARCHAR2(2 BYTE),
      CN_TYPE_DEFINITION       NUMBER(10),
     
    )
    Un doublon a ces caractéristiques:
    Le même CN_CALIBRE.
    Le même REVISION.
    Le même CN_DESCRIPTION.
    Le même USER_OBJECT_ID.
    Le même CN_NUM_ISA .

    Je pensais avec exist, mai je n'y arrive pas avec la jointure pour les CN_NUM_ISA.

    Merci de votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Je ne comprends pas vraiment ton souci.
    Si tu veux obtenir les lignes qui sont présentes dans tes deux tables, une jointure sur les 5 champs cités devrait suffire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from TN_CATIA_PART cat
    INNER JOIN TN_DOCUMENTATION doc
    ON cat.CN_CALIBRE = doc.CN_CALIBRE
    AND cat.REVISION = doc.REVISION
    AND cat.CN_DESCRIPTION = doc.CN_DESCRIPTION
    AND cat.USER_OBJECT_ID = doc.USER_OBJECT_ID
    AND cat.CN_NUM_ISA = doc.CN_NUM_ISA

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut merci
    Ce que je souhaite c'est obtenir les doublons de tn_documention:
    Le même tn_documention.CN_CALIBRE.
    Le même tn_documention.REVISION.
    Le même tn_documention.CN_DESCRIPTION.
    Le même tn_documention.USER_OBJECT_ID.
    Le même tn_CATIA_PART.CN_NUM_ISA .


    Voila ma requête pour vous montrer à quoi je pensais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT T1.OBJECT_ID, T1.CN_ID, T1.CN_CALIBRE,T1.USER_OBJECT_ID, T1.CN_DESCRIPTION,T1.REVISION,T1.STATE,
    T1.CREATION_DATE,T11.CN_NUM_ISA 
    FROM SMARTEAM.TN_DOCUMENTATION T1, TN_CATIA_PART T11 
     
    WHERE T1.OBJECT_ID=T11.OBJECT_ID and 
     
    EXISTS (SELECT OBJECT_ID, CN_ID, CN_DESCRIPTION,USER_OBJECT_ID, CN_CALIBRE 
    FROM SMARTEAM.TN_DOCUMENTATION T2 
    WHERE T1.OBJECT_ID <> T2.OBJECT_ID AND T1.CN_ID <> T2.CN_ID AND
     T1.CN_CALIBRE = T2.CN_CALIBRE  AND T1.CLASS_ID = T2.CLASS_ID AND 
    T1.REVISION = T2.REVISION AND T1.CN_DESCRIPTION = 
    T2.CN_DESCRIPTION AND T1.USER_OBJECT_ID = T2.USER_OBJECT_ID)
    voici un exemple doublon

    OBJECT_ID | CN_ID | CN_CALIBRE | USER_OBJECT_ID | CN_DESCRIPTION | REVISION | STATE | CREATION_DATE CN_NUM_ISA
    25176 | ViPrt-002295 | PE ME | 12516 |. ISO . | 00.A | 1 | 01/09/2006 09:27:45 | 123

    24232 | ViPrt-002274 | PE ME | 12516 |. ISO .| 00.A | 1 | 31/08/2006 06:33:19 | 123

    Dites moi si je suis assez clair ou si je dois vous éclairer un peu plus.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Une requête de ce type devrait te renvoyer les doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.CN_CALIBRE,T1.USER_OBJECT_ID, T1.CN_DESCRIPTION,T1.REVISION, T11.CN_NUM_ISA 
    FROM SMARTEAM.TN_DOCUMENTATION T1, TN_CATIA_PART T11 
    WHERE T1.OBJECT_ID=T11.OBJECT_ID 
    GROUP BY T1.CN_CALIBRE,T1.USER_OBJECT_ID, T1.CN_DESCRIPTION,T1.REVISION, T11.CN_NUM_ISA
    HAVING COUNT(*) > 1
    Un petit lien en prime : http://oracle.developpez.com/faq/?page=3-1#doublons

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 54
    Par défaut merci
    merci mais je doit afficher

    OBJECT_ID | CN_ID | CN_CALIBRE | USER_OBJECT_ID | CN_DESCRIPTION | REVISION | STATE | CREATION_DATE| CN_NUM_ISA

    Lorsque j'ajoute object_id à ta requête cela ne me retourne rien.

    le résultat que je désire est le suivant:

    OBJECT_ID | CN_ID | CN_CALIBRE | USER_OBJECT_ID | CN_DESCRIPTION | REVISION | STATE | CREATION_DATE CN_NUM_ISA

    25176 | ViPrt-002295 | PE ME | 12516 |. ISO . | 00.A | 1 | 01/09/2006 09:27:45 | 123

    24232 | ViPrt-002274 | PE ME | 12516 |. ISO .| 00.A | 1 | 31/08/2006 06:33:19 | 123

    encore merci de votre participation

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    C'est normal que ça ne te retourne rien si tu ajoutes object_id, étant donné que l'info est différente sur les deux lignes.
    En fait, il faut joindre le résultat de cette requête avec ta table d'origine sur les cinq champs en question.

    Ce qui donne quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT T.OBJECT_ID, T.CN_ID, T.CN_CALIBRE, T.USER_OBJECT_ID, T.CN_DESCRIPTION, T.REVISION, T.STATE, T.CREATION_DATE, T.CN_NUM_ISA
    FROM SMARTEAM.TN_DOCUMENTATION T
    INNER JOIN
    (
    SELECT T1.CN_CALIBRE,T1.USER_OBJECT_ID, T1.CN_DESCRIPTION,T1.REVISION, T11.CN_NUM_ISA 
    FROM SMARTEAM.TN_DOCUMENTATION T1, TN_CATIA_PART T11 
    WHERE T1.OBJECT_ID=T11.OBJECT_ID 
    GROUP BY T1.CN_CALIBRE,T1.USER_OBJECT_ID, T1.CN_DESCRIPTION,T1.REVISION, T11.CN_NUM_ISA
    HAVING COUNT(*) > 1 
    ) TT
    ON T.CN_CALIBRE = TT.CN_CALIBRE
    AND T.USER_OBJECT_ID = TT.USER_OBJECT_ID
    AND T.CN_DESCRIPTION = TT.CN_DESCRIPTION
    AND T.REVISION = TT.REVISION
    AND T.CN_NUM_ISA = TT.CN_NUM_ISA
    J'ai pas énormément de temps, donc je garantis pas que la requête fonctionne telle quel

    Edit : d'ailleurs après une brève vérif, le champs CN_NUM_ISA n'appartient pas à la table TN_DOCUMENTATION, donc enlève le du select dans un premier temps pour voir si tu obtiens ce que tu souhaites, puis ajoute ensuite une jointure sur l'autre table pour récupérer CN_NUM_ISA.

Discussions similaires

  1. [UBUNTU] Problème de détection souris/clavier
    Par Merlin dans le forum Ubuntu
    Réponses: 4
    Dernier message: 19/04/2006, 19h23
  2. D7/firebird 1.5 - détection de doublons
    Par jer64 dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/03/2006, 21h35
  3. Problème de gestion de doublons
    Par EJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 19h35
  4. [FAQ]problème de détection réseau.
    Par mickael777 dans le forum MFC
    Réponses: 6
    Dernier message: 13/05/2005, 14h43
  5. Problème de détection de nouveau processeur
    Par zakfa dans le forum Composants
    Réponses: 12
    Dernier message: 24/01/2005, 17h09

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