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 :

Question sur alternative au minus


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut Question sur alternative au minus
    Bonjour, je rencontre de sérieux problèmes de performance en effectuant les requêtes suivantes :
    Pour schématisé, disons que je possède deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     table1 (champs : A,B,C,X)
     table2 (champs : A1,B1,C1)
    A1,B1,C1 sont des champs de clés étrangères correspondants respectivement aux champs A,B,C. J'aimerais faire les lignes dans table2 non présentes dans table1 : je fait donc un minus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select A,B,C from table1 
     MINUS
     select A1,B1,C1 from table2
    Pour chaque ligne j'aimerais aussi récupéré le champ X. Donc pour cela j'effectue une nouvelle requête sur le résultat de l'étape précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select X,A,B,C from table1,
    (
      select A,B,C from table1 
      MINUS
      select A1,B1,C1 from table2
    ) ...
    Le problème et que cette étape prend plus de temps : ma requête passe de 1s à 6sec d'exécution : je voulais savoir s'il était possible de changer mon minus pour n'effectuer qu'un seul passage au lieu d'utiliser une sous-requête.

    J'espère que cela était clair.
    Pour info : je travailles avec une base Oracle 10g

    Merci d'avance pour votre retour.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    La première réponse qui me vient est un NOT IN ou un NOT EXISTS. Mais il y a sûrement quelque chose de plus optimisé.

    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 X,A,B,C FROM table1
     WHERE NOT EXISTS
    (
      SELECT 1 FROM table2
       WHERE A1 = A
         AND B1 = B
         AND C1 = C
    );
     
     
    SELECT X,A,B,C FROM table1
     WHERE (A, B, C) NOT IN
    (
      SELECT A1,B1,C1 FROM table2
    );

  3. #3
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut
    Le "not exists" fonctionne parfaitement merci ;-)

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

Discussions similaires

  1. Quelques questions sur l'alternance.
    Par BamBom dans le forum Etudes
    Réponses: 3
    Dernier message: 19/10/2010, 01h02
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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