Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2011, 17h33   #1
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
Par défaut Jointure de 3 tables

Bonsoir. je vous présente mon problème. J'ai 3 tables:
1 - la table chapitres qui se présente comme suit:
code_chapitre libelle_chapitre
----------------------------------
235 Chapitre 235
236 Chapitre 236
247 Chapitre 247
xyz Chapitre xyz
Dans cette table tous les code_chapitre sont à 3 caractères.

2 - la table articles qui est en fait un détail de la précédente et se présente comme suit:
code_article libelle_article
----------------------------------
235 Chapitre 235
2361 Chapitre 236-Article 1
2362 Chapitre 236-Article 2
2369 Chapitre 236-Article 9

2478 Chapitre 247-Article 8

xyz Chapitre xyz
Comme vous le constater dans cette table les code_article sont soit à 3 caractères soit à 4 caractères.

3- La 3e table montants contient en fait des montants pour certains éléments de la 2e.
code_article montant
----------------------------------
235 2 500
2361 57 800
2369 42 650


xyz 9 999

Lors d'une saisie, l'utilisateur entre un code a 3 chiffres correspondant au données de la 1ere table.

Je souhaite écrire une requête qui cherche dans la 1e table ce code (exemple 236) . S'il le trouve, il recherche dans la deuxième table tous les éléments correspondants (2361, 2362, 2369) et les montants de ces éléments dans la 3e table (avec 0 s'il n'y a pas de montant dans la 3e table).


J'ai pensé à des requêtes du type

Code :
1
2
3
4
5
6
7
select c.libelle_chapitre , 
a.code_article, 
a.libelle_article, 
m.montant 
from chapitres c LEFT JOIN articles 
ON (code_chapitre=MID(a.code_article,1,3)) LEFT JOIN montants m 
ON (a.code_article=m.code_article)
Mais j'obtiens une erreur du type "Erreur de syntaxe, opérateur absent dans l'expresion code_chapitre=MID(a.code_article,1,3)...

Ma première préoccupation c'est l'utilisation de la fonction MID et la seconde la requete peut elle marcher ?

merci
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h37   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Ecarbill,

Ton soucis vient, à l'origine, d'une erreur de conception.

Il aurait fallu :
Code :
1
2
3
4
5
code_chapitre   libelle_chapitre
235             Chapitre 235
236             Chapitre 236
247             Chapitre 247
xyz             Chapitre xyz
puis :
Code :
1
2
3
4
code_chapitre   code_article   libelle_article
236             2              Chapitre 236-Article 2
236             9              Chapitre 236-Article 9
247             8              Chapitre 247-Article 8
qui semble résoudre ton problème, par la même occasion.

En bref, si tu restes avec tes tables actuelles, tu cours vers de gros ennuis... avec des requêtes "usines à gaz" et, parfois, du code pour contourner ces erreurs de conception.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h43   #3
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
Ok, mais il se trouve que certains chapitres non pas de sous éléments (articles) mais se trouves bien dans la table des montants
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 21h06   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
Bonsoir,

après un peu de remise en forme, j’écrirais :
Code sql :
1
2
3
4
5
6
7
8
9
SELECT c.libelle_chapitre, 
       a.code_article, 
       a.libelle_article, 
       nz(m.montant,0) as LeMontant 
FROM   (chapitres c 
       LEFT JOIN articles a
         ON ( c.code_chapitre = Mid(a.code_article, 1, 3) ) )
       LEFT JOIN montants m 
         ON ( a.code_article = m.code_article )
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 10h08   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Ecarbill et Fabien,

Citation:
Envoyé par Ecarbill
Ok, mais il se trouve que certains chapitres non pas de sous éléments (articles) mais se trouves bien dans la table des montants
==> rien n'empêche de concevoir cette table comme suit :
Code :
1
2
3
4
5
6
code_chapitre  code_article  montant
235            0              2500
236            1             57800
236            9             42650

xyz            0              9999
==> si code_article=0, alors il s'agit du prix du chapitre.

Ceci dit, je ne doute pas que la requête de Fabien fonctionne : je ne l'ai pas testée, mais Fabien a dû s'y atteler.

Il est toujours dangereux de "faire rentrer" dans un seul attribut (un champ), deux attributs à part entière (deux champs), par concaténation. A terme, tu seras ennuyé (requête de regroupement, analyse croisée, etc...).

Je te conseille humblement et, néanmoins, fortement de corriger cette anomalie de conception.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 09h50   #6
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
Bonjour a tous et bonne et heureuse année 2012

Je crois que finalement j'ai changer la conception comme l'a suggéré Richard_35 et maintenant j'ai pu ecrire correctement la requete.

Merci de vos suggestions
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h26   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Ecarbill et bonne année 2012 à toi aussi,

N'oublies pas le bouton .
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web