|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Choix des jointures dans une requête |
| Débuté par dmairat, 28 déc. 2004 20:41 - 5 réponses |
| |
| | | |
|
| |
| Posté le 28 décembre 2004 - 20:41 |
Bonjour,
Je ne suis pas un spécialiste du SQL et je ne comprends pas pourquoi le choix des jointures a une importance dans une requête windev. Je parle de choix lorqu'il y a plusieurs possibilités pour lier les tables. Un informaticien qui n'utilise pas Windev m'a dit que normalement cela n'avait pas d'importance. Il semblerait que si dans Windev, ainsi qu'en fonction des conditions de selection. Je n'obtient pas le même résultat en fonction du choix des jointures.
Merci pour une explication
Denis |
| |
| |
| | | |
|
| | |
| |
| Posté le 29 décembre 2004 - 10:46 |
Moi ca me parait essentiel de choisir la jointure la mieux appropriée pourtant. C'est ce qui décrit la liaison entre les fichiers et qui détermine quelle informations vous allez obtenir.
Lisez ca http://www.w3schools.com/sql/sql_join.asp pour un exemple concret.
Denis wrote:
Bonjour,
Je ne suis pas un spécialiste du SQL et je ne comprends pas pourquoi le choix des jointures a une importance dans une requête windev. Je parle de choix lorqu'il y a plusieurs possibilités pour lier les tables. Un informaticien qui n'utilise pas Windev m'a dit que normalement cela n'avait pas d'importance. Il semblerait que si dans Windev, ainsi qu'en fonction des conditions de selection. Je n'obtient pas le même résultat en fonction du choix des jointures.
Merci pour une explication
Denis
|
| |
| |
| | | |
|
| | |
| |
| Posté le 29 décembre 2004 - 11:03 |
A mon avis, si windev te propose diférentes solutions de jointure c'est qu'il a trouvé différents clés étrangères pour effectuer ces jointures ... il te propose alors une solution de jointure pour chacune des clés étrangères qu'il a trouvé pour effectuer la jointure entre les différentes tables des champs qui se retrouvent dans ta requête ...
En fonction de la solution choisie, le résultat de requête est effectivement différent puisque qu'il n'y a pas forcément les mêmes occurences pour les différentes clés étrangères (sinon je pense que tu aurrais des doublons ou redondances de données)
Par exemple : Deux tables : T_DEMANDE( DEMANDE_Num, INTERLOCUTEUR_ID_EmanerDe, INTERLOCUTEUR_ID_RepondreA ) T_INTERLOCUTEUR( INTERLOCUTEUR_ID, INTERLOCUTEUR_Nom ) Si tu veux la lite des noms d'iterlocuteur qui ont fait une demande, ainsi que le numéro de la demande, tu met dans ta requête DEMANDE_Num et INTERLOCUTEUR_Nom windev te proposera deux jointures différentes : une utilisant INTERLOCUTEUR_ID_EmanerDe et une autre utilisant INTERLOCUTEUR_ID_RepondreA ... il faudra ici choisir la première ... Tu peux aussi avoir le cas de différentes tables intermédiaires ... là il faut choisir les jointures correspondantes au bon "chemin" reliant tes tables (si il y a plusieurs "chemins" possibles)
J'espère m'exprimer assez clairement ... ... ceci est mon avis sur la question ... si je suis dans le faux surtout dites le moi ! 
@Plus |
| |
| |
| | | |
|
| | |
| |
| Posté le 29 décembre 2004 - 13:58 |
Merci pour ton explication, toutefois dans ton exemple la jointure INTERLOCUTEUR_ID_EmanerDe n'est pas la même que INTERLOCUTEUR_ID. Je profite de ta gentillesse pour t'exposer mon problème qui me bloque complètement.
J'ai une table Prestations qui comprend les champs : - Prestations -Collab -Niveau -Dossier
Une table taux dossier qui comprend les champs : -Dossier -Taux Dossier -Niveau
une table Taux Niveau qui comprend les champs -Taux Niveau -Niveau
une table Taux collab qui comprend les champs -Collab -Taux Collab
Je voudrais obtenir dans ma requête toutes les prestations avec les taux Collab et avec les tauxDossier et tauxNiveau pour lesquelles le niveau est égal au niveau de la prestation sachant que dans certain cas le taux dossier ou le tauxNiveau n'existe pas.
J'ai fait les jointures suivantes : Prestations.collab = tauxcollab.collab prestations.dossier=tauxdossier.dossier prestations.niveau=tauxniveau.niveau
j'ai mis en conditions de sélection prestations.niveau=tauxdossier.niveau prestations.niveau=tauxniveau.niveau
j'ai déclaré les rubriques taux.dossier.niveau et taux.niveau.niveau comme pouvant supporter le Null. Dans les jointures j'ai également sélectionner les jointures externes pour obtenir les prestations qui n'avaient pas de taux dossier ou taux niveau et je n'obtiens pas le résultat escompté.
Merci si tu peux te pencher sur mon problème
Denis |
| |
| |
| | | |
|
| | |
| |
| Posté le 29 décembre 2004 - 15:25 |
A part : Lorsque windev te propose différentes solutions, il t'affiche sous forme graphique ses différente solution ... tu peux basculer sur l'affichage de la liste des liaisons ... comme ça tu peux cohisir la solution qui correspond à tes conditions ...
Sinon j'ai regardé le cas que tu expose : as-tu un table taux dossier ? ... avec les 4 tables que tu donne taux dossier est dans la table dossier ... mais aprés tu parle de tauxdossier.dossier ... Je suis reté avec tauxdossier dans la table dossier ... donc pas detable tauxdossier ...
Je te propose cette requête :
SELECT Prestation.Prestation AS Prestation, TauxCollab.Collab AS Collab, Dossier.TauxDossier AS TauxDossier, TauxNiveau.TauxNiveau AS TauxNiveau FROM TauxCollab, Prestation, TauxNiveau, Dossier WHERE TauxCollab.Collab = Prestation.Collab AND TauxNiveau.Niveau = Prestation.Niveau AND TauxNiveau.Niveau(+) = Dossier.Niveau(+) |
| |
| |
| | | |
|
| | |
| |
| Posté le 29 décembre 2004 - 16:34 |
oulla désolé j'ai tappé ma réponse à la hate ... je vois que j'ai fait plein de fautes !  désolé j'en ai même oublié la politesse en cette période de fêtes !
BONNES Fêtes à tous @plus  |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|