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

Bases de données Delphi Discussion :

conseil choix requete


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut conseil choix requete
    bonjour,

    je voudrais savoir quelle est la meilleur requête entre les 2 suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select CMDCLI.CONOCDE,CMDCLI.COIDCDE,CLIENT.CLNOM from ACHAT
    join CMDCLI on CMDCLI.COIDCDE=ACHAT.ACIDCDE
    join CLIENT on CLIENT.CLIDCLI=CMDCLI.COIDCLI
    group by CMDCLI.CONOCDE,CMDCLI.COIDCDE,CLIENT.CLNOM
    order by CMDCLI.CONOCDE desc
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select distinct CMDCLI.CONOCDE,CMDCLI.COIDCDE,CLIENT.CLNOM from ACHAT
    join CMDCLI on CMDCLI.COIDCDE=ACHAT.ACIDCDE
    join CLIENT on CLIENT.CLIDCLI=CMDCLI.COIDCLI
    order by CMDCLI.CONOCDE desc
    j'ai l'impression que la 2ème est plus rapide.
    Mais est ce qu'elles sont 100 % équivalentes ?

    cordialement

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    GROUP BY sans un aggrégat comme COUNT, SUM, MAX... perd de son intérêt
    Si ton but est UNIQUEMENT l'élimination de doublon, DISTINCT est conçu pour cela !

    J'aurais plutôt tendance à l'écrire la jointure dans l'autre sens parce que les tables que tu veux lire c'est plutôt CLIENT et CMDCLI en fonction du contenu de ACHAT, mais cela ne change pas le résultat

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select DISTINCT CMDCLI.CONOCDE, CMDCLI.COIDCDE, CLIENT.CLNOM 
    from CLIENT
    join CMDCLI on CLIENT.CLIDCLI = CMDCLI.COIDCLI
    join ACHAT on CMDCLI.COIDCDE = ACHAT.ACIDCDE
    order by CMDCLI.CONOCDE desc

    Si c'est Achat qui "augmente" la cardinalité d'où la bidouille du DISTINCT, tente un EXISTS, cela devrait donner un truc comme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select CMDCLI.CONOCDE, CMDCLI.COIDCDE, CLIENT.CLNOM 
    from CLIENT
    join CMDCLI on CLIENT.CLIDCLI = CMDCLI.COIDCLI
    WHERE EXISTS (SELECT * FROM ACHAT WHERE CMDCLI.COIDCDE = ACHAT.ACIDCDE)
    order by CMDCLI.CONOCDE desc

    Si c'est dès CMDCLI que la cardinalité augmente, c'est donc que COIDCDE n'est pas une clé unique dans CMDCLI et là, c'est comme souvent DISTINCT sert plutôt à masquer une mauvaise jointure qui produit des doublons
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. [Hardware][Conseil] Choix d'un serveur
    Par you98 dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 12/11/2005, 14h52
  2. [Hardware][Conseil] Choix d'une carte graphique bas de gamme
    Par Laurent Gomila dans le forum Composants
    Réponses: 3
    Dernier message: 09/11/2005, 10h55
  3. [Conseil] Choix de son forum
    Par Acti dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 19/08/2005, 13h08
  4. Conseil choix structure STL
    Par SteelBox dans le forum SL & STL
    Réponses: 3
    Dernier message: 15/03/2005, 02h13
  5. Conseille Choix entre MySQL et InterBase?
    Par Redhouane dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/09/2004, 11h42

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