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

Requêtes MySQL Discussion :

Requetes de sélection


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : apprenti
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 212
    Points : 100
    Points
    100
    Par défaut Requetes de sélection
    Bonjour à tous,

    Je suis devant un problème :
    J'ai une table avec 105 000 lignes. Je souhaiterais faire un tri pour n'afficher que certains les plus utilisées (présentes dans les tables entrée / sorties (vidées tous les 2 ans)
    Du coup, j'ai fait deux requetes :

    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
     
    SELECT
    Stock.Code_article AS Code_article,  
    Stock.CodeColoris AS CodeColoris,  
    Articles.Libellé AS Libellé,  
    Stock.DernierPxAchat AS DernierPxAchat,   
    Stock.Unite AS Unite, 
    Stock.QteEnStock AS QteEnStock,   
    Stock.QteEnCde AS QteEnCde,   
    Stock.QteRes AS QteRes,   
    Stock.QteEntrées AS QteEntrées,   
    Stock.QteSorties AS QteSorties,  
    Stock.QteStkMini AS QteStkMini,   
    Stock.QteStkMaxi AS QteStkMaxi,  
    Articles.famille AS Famille,  
    ArticlesFournisseurs.Codefournisseur As Fournisseur,  
    Articles.Obsolète AS Obsolète,   
    Stock.Obsolète AS Obsolète_St 
    FROM  
    Articles, ArticlesFournisseurs, Stock 
    WHERE  Articles.Code_article = Stock.Code_article  
    AND    Articles.Code_article = ArticlesFournisseurs.Code_article  
    AND stock.obsolète = 0 AND Articles.obsolète = 0
    and (stock.CodeArtCodeColoris in 
    (select EntreeStock.CodeArtCodeColoris
    from EntreeStock 
    group by EntreeStock.CodeArtCodeColoris) 
    OR stock.CodeArtCodeColoris in 
    (select SortieStock.CodeArtCodeColoris 
    from SortieStock 
    group by SortieStock.CodeArtCodeColoris) )
    ORDER BY Code_article ASC, CodeColoris ASC
    Le nombre de lignes suite à cette requete est de 9 175 lignes

    Quand je fait son contraire :

    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
     
    SELECT
    Stock.Code_article AS Code_article,  
    Stock.CodeColoris AS CodeColoris,  
    Articles.Libellé AS Libellé,  
    Stock.DernierPxAchat AS DernierPxAchat,   
    Stock.Unite AS Unite, 
    Stock.QteEnStock AS QteEnStock,   
    Stock.QteEnCde AS QteEnCde,   
    Stock.QteRes AS QteRes,   
    Stock.QteEntrées AS QteEntrées,   
    Stock.QteSorties AS QteSorties,  
    Stock.QteStkMini AS QteStkMini,   
    Stock.QteStkMaxi AS QteStkMaxi,  
    Articles.famille AS Famille,  
    ArticlesFournisseurs.Codefournisseur As Fournisseur,  
    Articles.Obsolète AS Obsolète,   
    Stock.Obsolète AS Obsolète_St 
    FROM  
    Articles, ArticlesFournisseurs, Stock 
    WHERE  Articles.Code_article = Stock.Code_article  
    AND    Articles.Code_article = ArticlesFournisseurs.Code_article  
    and (stock.CodeArtCodeColoris not in 
    (select EntreeStock.CodeArtCodeColoris
    from EntreeStock 
    group by EntreeStock.CodeArtCodeColoris) 
    AND stock.CodeArtCodeColoris not in 
    (select SortieStock.CodeArtCodeColoris 
    from SortieStock 
    group by SortieStock.CodeArtCodeColoris) )
    ORDER BY Code_article ASC, CodeColoris ASC
    J'ai un résultat de 93 546 lignes ....

    Entre les deux, j'en ai perdu, et je n'arrive pas à trouver pourquoi.

    J'ai essayé de faire une requete 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT
    Stock.Code_article AS Code_article,  
    Stock.CodeColoris AS CodeColoris,  
    Articles.Libellé AS Libellé,  
    Stock.DernierPxAchat AS DernierPxAchat,   
    Stock.Unite AS Unite, 
    Stock.QteEnStock AS QteEnStock,   
    Stock.QteEnCde AS QteEnCde,   
    Stock.QteRes AS QteRes,   
    Stock.QteEntrées AS QteEntrées,   
    Stock.QteSorties AS QteSorties,  
    Stock.QteStkMini AS QteStkMini,   
    Stock.QteStkMaxi AS QteStkMaxi,  
    Articles.famille AS Famille,  
    ArticlesFournisseurs.Codefournisseur As Fournisseur,  
    Articles.Obsolète AS Obsolète,   
    Stock.Obsolète AS Obsolète_St 
    FROM  
    Articles, ArticlesFournisseurs, Stock 
    WHERE  Articles.Code_article = Stock.Code_article  
    AND    Articles.Code_article = ArticlesFournisseurs.Code_article  
    AND stock.CodeArtCodeColoris NOT IN 
    (Select stock.CodeArtCodeColoris 
    From stock where (stock.obsolète = 0 AND Articles.obsolète = 0) 
    and (stock.CodeArtCodeColoris in (select EntreeStock.CodeArtCodeColoris from EntreeStock group by EntreeStock.CodeArtCodeColoris) 
    OR stock.CodeArtCodeColoris in (select SortieStock.CodeArtCodeColoris from SortieStock group by SortieStock.CodeArtCodeColoris)))
    L'execution n'est toujours pas finie ...
    Pouvez vous m'aider ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il y a beaucoup de choses à revoir dans vos requêtes
    - les jointures codées avec l'opérateur JOIN seraient plus lisibles que celles codées dans le prédicat de restriction WHERE
    - vous n'utilisez pas d'alias de table, c'est plutôt pénible à lire
    - vous utilisez des requêtes IN là où un test d'existence avec EXISTS serait préférable
    - le regroupement dans les requêtes corrélées est de plus inutile et nuisible aux performances

    Ce qui donne quelque chose comme ça :

    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
    SELECT ST.Code_article AS Code_article  
         , ST.CodeColoris  AS CodeColoris  
         , AR.Libellé      AS Libellé  
    [...]
    FROM   Articles   AR
    inner join  ArticlesFournisseurs AF
       on AF.Code_article = AR.Code_article 
    inner join  Stock ST
       on ST.Code_article = AR.Code_article  
    where ST.obsolète = 0 
      and AR.obsolète = 0
      and (   exists
              (select 1
               from EntreeStock ES
               where ES.CodeArtCodeColoris = ST.CodeArtCodeColoris
              ) 
           OR exists
              (select 1
               from SortieStock SS 
               where ES.CodeArtCodeColoris = ST.CodeArtCodeColoris
              ) 
          )
    ORDER BY ST.Code_article ASC
           , ST.CodeColoris  ASC

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    vous avez probablement des stock.CodeArtCodeColoris à NULL

Discussions similaires

  1. requete de sélection aléatoire distincte
    Par calitom dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/12/2006, 17h59
  2. [MySQL] Paramètrer ma requete après sélection dans un formulaire
    Par philippef dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/11/2006, 13h39
  3. L'enregistrement est supprimé (requete de sélection)
    Par papy_tergnier dans le forum Access
    Réponses: 1
    Dernier message: 17/05/2006, 15h14
  4. Requete de sélection des 5 dernièrs entrées.
    Par WriteLN dans le forum Administration
    Réponses: 4
    Dernier message: 22/03/2004, 21h40
  5. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 10h40

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