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

Langage SQL Discussion :

Problème sur requête SQL


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 30
    Points
    30
    Par défaut Problème sur requête SQL
    Bonjour,

    J'ai deux tables :
    Materiels(identifiant,....)
    Indisponibles(IDindisponible, identifiant,...)

    J'arrive à extraire les résultats que je veux en utilisant la requête suivante :
    select identifiant from Materiels where identifiant not in (select identifiant from Indisponibles)

    Cependant, étant donné que j'ai plusieurs milliers d'enregistrements la requête me semble un peu longue à exécuter et après avoir lu les tutos de developpez.com, il est décrit que l'on peut arriver a un meilleur résultat en travaillant sur les jointures et c'est là ou je coince, en gros la question est :
    peut on écrire la requête citée ci-dessus sans utiliser le NOT IN

    Merci d'avance

    Fred

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    il y a effectivement plusieurs façons d'écrire ceci, pour les plus courantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select identifiant 
    from Materiels a 
    where not exists (select 1 from Indisponibles b where a.identifiant  = b.identifiant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select identifiant 
    from Materiels a 
    left outer join Indisponibles b on a.identifiant  = b.identifiant
    where b.identifiant is null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select identifiant 
    from Materiels 
    except
    select identifiant from Indisponibles
    Maintenant, avez-vous des indexs sur :
    Materiels (identifiant)
    Indisponibles (identifiant)

    Si ces colonnes sont des clefs primaires c'est bon, si ce sont des clefs étrangères / autre il faudrait vérifier.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    merci pour la réponse. Après plusieurs tests je n'ai pas constaté d'amélioration notables quand au temps d'exécution, mais cela valait le coup d'essayer.

    Fred

Discussions similaires

  1. Problème sur requête sql
    Par titeufdev dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/12/2010, 00h09
  2. problème sur requête SQL
    Par Ohemeg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/12/2010, 00h50
  3. Problème sur requête SQL
    Par oskour dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/07/2010, 14h22
  4. Problème sur Requête sql
    Par devdev dans le forum Développement
    Réponses: 1
    Dernier message: 16/06/2009, 11h24
  5. Problème sur requête SQL (Caféine)
    Par Jean-Pierre49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2007, 08h19

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