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 :

Requête qui rame: CREATE TABLE + NOT IN + INNER JOIN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut Requête qui rame: CREATE TABLE + NOT IN + INNER JOIN
    Bonjour,

    Je récupère du code et malheureusement je ne maîtrise pas encore les INNER JOIN et comment les contourner. J'ai donc une requête qui se déroule pas trop mal tant qu'il n'y a pas de trop de données mais qui mets plus d'une demi-heure lorsque j'ai 30000 enregistrements. Est-ce que quelqu'un peut me dire comment puis-je l'améliorer?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE R_INSERT AS select rownum as ID, RPLAN, VRS, 
    SCODE, SCLASS, IMP_CAT, TMODEL, TZONE, MOD_SEL, PMODEL, 
    ALT_PMODEL, PSTHR, A_TYPE, A_CHARGE, INFO from R_UPDATE WHERE 
    (IMP_CAT, RPLAN, nvl(SCLASS,'*'), SCODE, TMODEL, TZONE, VRS) 
    NOT IN ( select IMP_CAT, RPLAN, nvl(SCLASS,'*'), 
    SCODE, TMODEL, TZONE, VRS FROM R_UPDATE INNER JOIN R_INIT USING 
    (IMP_CAT, RPLAN, SCLASS, SCODE, TMODEL, TZONE, VRS))
    D'avance merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Qu'est-ce que vous voulez faire technico-fonctionnellement ?

    Insérer dans R_INSERT les données de R_UPDATE n'existant pas dans R_INIT ?

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Si tu veux créer une table avec les R_UPDATE qui ne sont pas dans R_INIT, tu fais une étape superflue dans ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE R_INSERT AS 
    SELECT rownum AS ID, RPLAN, VRS, 
    SCODE, SCLASS, IMP_CAT, TMODEL, TZONE, MOD_SEL, PMODEL, 
    ALT_PMODEL, PSTHR, A_TYPE, A_CHARGE, INFO 
    FROM R_UPDATE 
    WHERE  (IMP_CAT, RPLAN, nvl(SCLASS,'*'), SCODE, TMODEL, TZONE, VRS) 
    NOT IN ( SELECT IMP_CAT, RPLAN, nvl(SCLASS,'*'), SCODE, TMODEL, TZONE, VRS 
    JOIN R_INIT)
    Ensuite pour les performances, il faudrait le plan d'exécution

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut
    De ce que je comprends OUI, je veux dans R_INSERT les R_UPDATE qui ne sont pas dans R_INIT.
    Je vais déjà essayer d'enlever le USING comme tu me proposes.
    Merci.
    Si vous avez d'autres idées, je prends. :-)

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec NOT EXISTS aussi ça devrait le faire :
    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
    CREATE TABLE R_INSERT
    AS
    SELECT rownum AS ID,
           RPLAN,
           VRS,
           SCODE,
           SCLASS,
           IMP_CAT,
           TMODEL,
           TZONE,
           MOD_SEL,
           PMODEL,
           ALT_PMODEL,
           PSTHR,
           A_TYPE,
           A_CHARGE,
           INFO
      FROM R_UPDATE rup
     WHERE NOT EXISTS (SELECT NULL
                         FROM R_INIT rin 
                        WHERE rin.IMP_CAT = rup.IMP_CAT
                          AND rin.RPLAN   = rup.RPLAN
                          AND rin.SCLASS  = rup.SCLASS
                          AND rin.SCODE   = rup.SCODE
                          AND rin.TMODEL  = rup.TMODEL
                          AND rin.TZONE   = rup.TZONE
                          AND rin.VRS     = rup.VRS);

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2004
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 163
    Par défaut
    Merci. Je vais essayer ça et mesurer les temps, je vous tiendrai au courant.

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 19/06/2009, 21h59
  2. Réponses: 2
    Dernier message: 17/06/2009, 11h16
  3. comment formuler une requête qui joingne trois tables
    Par s.mustapha86 dans le forum Hibernate
    Réponses: 4
    Dernier message: 30/07/2008, 20h33
  4. Réponses: 2
    Dernier message: 25/06/2008, 14h58
  5. Requête qui interroge 3 tables
    Par louroulou dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/07/2007, 11h34

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