Comment savoir quand placer un DISTINCT : SQL

tozinho92 Messages postés 16 Statut Membre -  
SebManfred Messages postés 484 Statut Membre -
Hello World !
- Je suis un programmeur débutant( en gros une raclure comparé à ceux qui, je l'espere, liront ce message.)
- Comme mon titre lindique j'ai un probleme sur SQL, sur les creations de requete et plus particulierement les DISTINCT.
- Je sais que l'on place un distinct pour eviter les doublons et qu'il faut donc le placer judicieusement.
- Seulement voila, mon probleme est le suivant :




- Lorsqu'il s'agit de le faire sur une table c'est simple, un peu d'imagination : On recreer a peu pres la table dans sa tete et on y arrive.
Mon probleme c'est quand la requete implique beaucoup de tables, méttons 5 par exemple. Le truc c'est que dans ma tête moi jessaye de passer table par table, en multipliant, les lignes, seulement quand il y a trop de multiplication comme ici par exemple :

POULET                               PROPRIETAIRE
--------------------                 -----------------
| NumPoulet          | ---------->   | NumAcheteur    |  
| NumOeuf            |               | NumPoulet      |  (la CIR va vers NumPoulet )
| NbreOeufs          |               | PrixPoulet     |
--------------------                  ----------------


Je donne cette exemple pour que vous vous représentiez un peu un cas de jointure ou, quand on me demande une requete, il me deviens très vite impossible de, en meme temps pensé :
- A la facon dont les lignes se multiplient.
- Ensuite quel sont les répercution sur les autres attributs.
- Et en plus pensé a la séléction a faire sur les lignes dans le cas ou j'ai une condition dans mon WHERE .

Pour resumé mon probleme c'est que ma facon de faire implique que je dois penser à 1000 chose à la fois. Je pense que je me trompe parceque dans le cas que je vous présente il s'agit d'un theme de base, abordé dans les bases de données relationnel. Vous devez connaitre un moyen plus simple, une méthode, pour y arrivé plus vite.


JE VOUS SEREZ TRES RECONNAISSANT DE M'EXPLIQUER VOTRE FACON DE FAIRE POUR CEUX QUI SAVENT. EN ESSAYANT DE MEXPLIQUER CELA AVEC DES MOTS ASSEZ SIMPLE :-) ( je sais ca fais beaucoup de choses a la fois mais c'est vraiment vitale.)

En Vous Remerciant !

2 réponses

ego
 
pour faire une jointure, il faut au moins 1 element commun.
si tu joints NumPoulet dans ton cas, tu pourras avoir par ce biais tous les elements associés a ce numpoulet (proprio et poulet).
le probleme que tu vas avoir, c est si c est une base access ou des tables mysql!
la structure des requêtes n est pas toujours strictement la meme (il faut d abord ouvrir les tables en mysql)
en VBA, une requête style
SELECT poulet.NumPoulet, Proprietaire.Nom, Proprietaire.PrixPoulet
FROM (poulet INNER JOIN Proprietaire ON poulet.NumPoulet = Proprietaire.NumPoulet) INNER JOIN acheteur ON Proprietaire.NumAcheteur = acheteur.NumAcheteur;
te permet d avoir le nom et le prix payé par l acheteur a partir du NumPoulet.
il suffit d avoir une clé commune et unique entre 2 tables.
Tu peux avoir 50 tables liées par 25 champs communs entre 2 tables (ici NumPoulet puis NumAcheteur sur 3 tables)
c est assez clair?
@+
0
SebManfred Messages postés 484 Statut Membre 128
 
pour etre un peu plus distant du sujet, et plus général, évite d'essayer de voir la chose enregistrement par enregistrement. si tu t'orientes vers le développement de bases de données, tu vas finir un jour par taper sur des bases qui ont plusieurs millions d'enregistrement, et il te sera complètement impossible de voir les choses comme ça. essaie plutot de voir les choses de façon ensembliste. c'est moins facile au début, mais plus vite tu y arrives, plus vite tu peux passer à la vitesse supérieure.
avec un peu d'habitude, un "petit dessin" représentant la forme des tables (et non pas les enregistrements) est la plupart du temps amplement suffisant.
après, pour maitriser le SQL, il n'y a qu'une seule solution... faire des exos, des exos et des exos, pour te familiariser avec.
0