SQL : Quand ne faut il pas mettre de DISTINCT

Fermé
tozinho92 - 8 janv. 2008 à 23:48
phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 - 9 janv. 2008 à 23:31
Hello World !
Je voulais savoir( c'est relativement urgent :-) ), en SQL, dans tout s'qui est manipulation, (where, agrégats, corélation ect... ) j'ai toujours eu du mal a repéré quand, avec les attributs de mon select il y aura des doublons dans les lignes que je séléctionne. Je me plante souvent dans les DISTINCT, ou bien alors COUNT ( DISTINCT ) ect ... je me demande si il n'y aurait pas une éspece de théoreme qui dirait quele chose du genre :

les seuls cas ou l'on met un distinct sont quand il n'y a pas de clé primaire dans le select ou dans le WHERE le HAVING

voila un exemple, il est surement faux, ou bien alors incomplet, mais ce que je veux cest savoir s'il existe des cas bien précis, des structures, qui faut retenir, puis ensuite reapliquer betement quand on voit un grand schéma plein de tables. J'imagine que pour ceux qui sont balèze en SQL ça doit etre devenu mécanique et il ne se posent meme plus la question tellement c'est evident, et je demande donc à ces gens la de me dire comment il font si c'est possible !

En vous remerciant !
A voir également:

4 réponses

phil_232 Messages postés 286 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 12 juin 2008 33
9 janv. 2008 à 23:31
un DISTINCT s'utilise pour éliminer des doublons dans une requête. souvent cela peut-être évité par un design propre de sa bdd et les requêtes. en fait le DISTINCT a une grande influence sur la performance du serveur bdd. l'histoire derrière est que pour éliminer les doublons le moteur de la bdd doit d'abord faire un tri sur la totalité des enregistrement trouvé (bon ca va pour qq 100 ligne mais après ça peut se faire remarquer). ensuite le serveur doit parcourir le résultat et puis éliminer les doublons. il est donc complètement faux de dire qu'on peut l'utiliser à volonté. en fait on essaye à tout prix de l'éviter.
2
guitou429 Messages postés 198 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 septembre 2012 17
9 janv. 2008 à 01:04
Tu peux utiliser le DISTinct dans tout type de requetes, elle permet simplement de sélectionner une seule fois le champ entre parenthèse. Aucun pb avec les clauses having et group by
0
c'est pas s'queu je te demande lol, j'avais bien compris son utilité :).
Le probleme c'est que une fois que les requete deviennent compliké et que dans mon select j'ai 3 attribut et dans mon where j'ai des conditions sur 4 autres, ben la je memelle un peu lespinceaux, parceke dans ma tete j'essaye de séléctionné les 3 premier attribut, et petit a petit de retirer les lignes qui respectent pas mé 4 condtion dans le where et essayé tant bien que mal de trouvé si il reste des doublons, mais comme tu peux ten douté ca devient assez coton, et quand c aussi compliké, je ny arrive que tres rarement.

Mon probleme c ke je pense ke c pas la bonne façon de procédé, et je voudrais savoir si ya une maniere plus simple que la mienne de trouvé si y reste des doublons.

Voila, si tu pouvais repondre à ce probleme ca ce sré pas mal ;) !
0
guitou429 Messages postés 198 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 septembre 2012 17
9 janv. 2008 à 19:42
en effet ca a l'air compliqué rien qu'a l'explication. Je comprend ton soucis mais pour cela il faudrait la requete sous les yeux si ce nest as trop demandé et regardé ensemble ce qui ne vas pas.
Mais en effet ca al'air bien complexe lol
0