Requête trois tables

Fermé
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019 - 30 juil. 2017 à 14:17
 amo-51 - 10 août 2017 à 13:42
Bonjour,

j'ai trois tables
table 1 : 8000 lignes représentant des clients
Table 2 : 350 lignes représentant des clients
Table 3 : 2500 lignes représentant des clients

j'ai créer une requête regroupant les trois tables
le résultat acces crée une requête avec 250 clients

Comment faire pour avoir une requête qui ramène les 8000 clients

merci de m'aider

A voir également:

16 réponses

jee pee Messages postés 40591 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 décembre 2024 9 463
30 juil. 2017 à 14:55
Bonjour,

Je n'utilise pas Access donc ne sais pas comment cela se présente dans ce logiciel.

Mais pour faire ce que tu veux, il faut chercher vers les jointures externes. Une jointure classique (jointure interne) ramène les enregistrements qui ont une correspondance dans deux tables (ou plus). Une jointure externe ramène tous les enregistrements, même quand ils n'ont pas de correspondance dans l'une des 2 tables.

cdlt
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
30 juil. 2017 à 15:22
merci pour votre réponse

je viens de vérifier les jointures

mais apparemment ce n'est pas ca le problème
0
Utilisateur anonyme
30 juil. 2017 à 18:52
Bonjour,

Utilises une requête union...

A+
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
30 juil. 2017 à 19:15
bonjour, peux-tu partager le code SQL de ta requête?
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
31 juil. 2017 à 11:36
ce code a été généré par Access

SELECT DEG.[N° Compte], DEDI.[RAISON SOCIALE], DEDI.TYPE, DEG.Activité, DEG.[Structure d'étude], DEG.Participation, DGA.Actionnariat, DGA.[Organe de décision], DGA.CMLT, DGA.CCT, DGA.EPS, DGA.Rééchelonnement, DEDI.[T/ EXPLOIT], DEDI.[T/ INVEST], DEDI.[T/ EXPLOIT], DEDI.[T / ENGAGEMENTS], DGA.[Révision garanties/ réserves], Max(DGA.Date) AS MaxDeDate
FROM (DEDI INNER JOIN DEG ON DEDI.[N° CLIENT] = DEG.[N° Compte]) INNER JOIN DGA ON DEG.[N° Compte] = DGA.[N° Compte]
GROUP BY DEG.[N° Compte], DEDI.[RAISON SOCIALE], DEDI.TYPE, DEG.[Structure d'étude], DEG.Participation, DGA.Actionnariat, DGA.[Organe de décision], DGA.CMLT, DGA.CCT, DGA.EPS, DGA.Rééchelonnement, DEDI.[T/ INVEST], DEDI.[T/ EXPLOIT], DEDI.[T / ENGAGEMENTS], DGA.[Révision garanties/ réserves], DEDI.[T/ EXPLOIT]
HAVING (((DEG.[Structure d'étude])=[quelle structure?]));
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
31 juil. 2017 à 13:23
comme écrit par jee pee, il s'agit de jointures internes.
je te suggère d'essayer en remplaçant (deux fois) INNER par LEFT.
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
31 juil. 2017 à 14:20
désolé pour le retard, perte de connexion internet

je viens de changer INNER par LEFT en deux positions

et voila access, me donne une requête de tous les clients les 8000 mais certains champs sont vides

les champs en question sont ceux ramenées des autres tables
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
31 juil. 2017 à 18:06
tu voulais bien avoir les 8000 clients, donc tu progresses, on est d'accord?
tu seras sans doute plus satisfait du résultat si, dans la requête, tu récupères le compte dans DEDI au lieu de DEG.
afin d'avoir:
SELECT DEDI.[N° Compte] ... GROUP BY DEDI.[N° Compte] ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
est ce que les trois tables sont identiques dans leurs format de champs.
y t il des risques de doublon.
Supprime les clés primaires Faits des requetes ajout pour fusionner les trois tables
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
2 août 2017 à 18:16
tu voulais bien avoir les 8000 clients, donc tu progresses, on est d'accord?
tu seras sans doute plus satisfait du résultat si, dans la requête, tu récupères le compte dans DEDI au lieu de DEG.
afin d'avoir:
SELECT DEDI.[N° Compte] ... GROUP BY DEDI.[N° Compte] ...
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
3 août 2017 à 14:25
Bonjour les amis

merci de vouloir m'aider
je pense que j'ai un problème avec les relations entre les tables

j'essaie de comprendre les relations access pour l'adapter a mon cas
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
3 août 2017 à 14:39
ceci m'avait semblé logique comme relation:
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° CLIENT] = DEG.[N° Compte]) LEFT JOIN DGA ON DEG.[N° Compte] = DGA.[N° Compte] 
0
castours > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
3 août 2017 à 15:03
bonjour
Le plus souvent les relations se font un a plusieurs avec un champ N° auto dans la table principale et un champ numerique dans la table secondaire.
Exemple dans une base données adresses j'ai une table ville et une table adresse.
Table ville N°LisVil en auto comme clé primaire plus champ NomVille et CodePostal et une table adresse champ Nom, Prenom, Adresse, NomVille , code Postal et N°LisVil en numérique indexé à plusieurs. On fait la relation entre c'est 2 champs.
Donc on peut ecrire plusieurs adresses issue d'une meme ville
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019 > yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024
3 août 2017 à 15:16
oui elle est logique

mais access me donne un tableau avec les champs sollicités sans les données à l’intérieur
donc il y a un problème
et je pense qu'il s'agit des relations
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019 > castours
3 août 2017 à 15:19
j'ai cru comprendre qu'il y a trois types de relations
1- Un à Un
2- Un à plusieurs
3- Plusieurs a plusieurs , et dans ce cas précis, il faudrait créer une table de jonction intégrant deux clés primaires issus de deux tables et qui deviennent des clés primaires dans la table jonction
tout cela c'est dur pour moi, ca me prend du temps de l'appliquer sur mes propres tables
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
Modifié le 3 août 2017 à 15:41
tu as 8000 clients dans ta table principale, DEDI
pour certains de ces clients, tu as des informations dans deux autres tables, DEG et DGA.
c'est exact?
je suggère plutôt ceci:
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° CLIENT] = DEG.[N° Compte]) LEFT JOIN DGA ON DEDI.[N° Compte] = DGA.[N° Compte] 

tu avais raison, la relation précédente n'était pas correcte.
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
3 août 2017 à 16:02
voila le message qui me fait maintenant lorsque j’exécute la requête:

Microsoft Access ne peut pas représenter l’expression de la jointure DEDI.(N° Compte)= DGA. (N° Compte) en mode création :
  • un ou plusieurs champs ont peut être été supprimé ou renommé
  • le nom de un ou de plusieurs champs ou tables spécifiés dans l’expression de la jointure est peut être mal orthographié
  • La jointure utilise peut être un opérateur, tel que > ou < qui n’est pas géré en mode de création
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
3 août 2017 à 17:08
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° CLIENT] = DEG.[N° Compte]) LEFT JOIN DGA ON DEDI.[N° CLIENT] = DGA.[N° Compte] 
0
j'ai utilisé cet sql
voir message retourné par access publié en 16:02
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557
3 août 2017 à 19:27
j'ai proposé à 17:08 un sql différent de celui que tu as testé avant 16:02.
tu n'as pas répondu à la question posée à 15:38.
0
j'ai répondu voir message 15h19
j'ai testé les deux sql
le premier erroné (requête vide)
le deuxième : message d'erreur (voir contenu message 16 02
0
Utilisateur anonyme
3 août 2017 à 23:36
Je m'immisce,

mais je commencerais par renommer ces xxxxxxx champs avec des "°", ya rien de tel pour mettre le bouz...

A+
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
4 août 2017 à 07:44
tu as 8000 clients dans ta table principale, DEDI.
pour certains de ces clients, tu as des informations dans deux autres tables, DEG et DGA.
est-ce exact?
je suggère plutôt ceci:
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° CLIENT] = DEG.[N° Compte]) LEFT JOIN DGA ON DEDI.[N° CLIENT] = DGA.[N° Compte]
0
Bonjour
j'ai déjà testé ce sql (voir mon precedent message)
a titre de rappel, access me fait en retour le message suivant:

Microsoft Access ne peut pas représenter l’expression de la jointure DEDI.(N° Compte)= DGA. (N° Compte) en mode création :
un ou plusieurs champs ont peut être été supprimé ou renommé
le nom de un ou de plusieurs champs ou tables spécifiés dans l’expression de la jointure est peut être mal orthographié
La jointure utilise peut être un opérateur, tel que > ou < qui n’est pas géré en mode de création
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51
Modifié le 6 août 2017 à 11:13
peux-tu répondre à la question posée?
je pense que tu ne l'as pas testé: regarde bien: le message d'erreur ne correspond pas à la requête.
0
non vous vous trompez j'ai bien testé
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51
6 août 2017 à 12:09
peux-tu partager le code SQL de la requête testée?
0
SELECT DEDI.[N° Compte]
FROM DEDI LEFT JOIN DEG ON DEDI.[N° Compte] = DEG.[N° Compte]
WHERE (((DEG.[N° Compte]) Is Null));
0
au faite je pense avoir trouver la source de mon problème

il s'agit de l’intégrité référentiel (le contenu des tables)
0
bonjour
c'est fort possible mais peut tu me faire parvenir ta base a castours arobase club-internet.fr.
Je verrai mieux ton probleme
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557
6 août 2017 à 19:05
ou bien, amo-51, partager sur le forum un lien vers ton fichier.
0
prière de me redonner votre émail
0
Bonjour

j'ai pas pu partager mon fichier

dites moi comment faire
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
7 août 2017 à 11:46
Bonjour
Tu compresse ton fichier en zip ou rar
Tu vas dans cjoint et importe ta base compressée
Tu créais le lien que tu copies et deposes dans un message de comment ca marche
castours arobase club-internet .fr
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
7 août 2017 à 11:50
bonjour
voici le lien
https://www.cjoint.com/
tu as aussi smash

https://fromsmash.com/
0
http://www.cjoint.com/c/GHhkhqENeqd
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
7 août 2017 à 13:00
ceci fonctionne:
SELECT DEDI.[N° Compte],  DEDI.TYPE, DEG.Activité, DEG.[Structure d'étude], DEG.Participation, DGA.Actionnariat, DGA.[Organe de décision], DGA.CMLT, DGA.CCT, DGA.EPS, DGA.Rééchelonnement, DEDI.[T/ EXPLOIT], DEDI.[T/ INVEST], DEDI.[T/ EXPLOIT],  DGA.[Révision garanties/ réserves],DGA.Date
FROM (DEDI left JOIN DEG ON DEDI.[N° Compte] = DEG.[N° Compte]) left JOIN DGA ON DEDI.[N° Compte] = DGA.[N° Compte]

et il y a des doublons dans ta table DGA
0
la table DGA contient des informations un peu spécial

effectivement on peut trouver un n de compte deux ou quatre fois pour des dates différentes

ce qui m’intéresse en définitif c'est le n de compte de la dernière date de l'année

c'était quoi comme souci
relation, jointure ou autre ?
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51
7 août 2017 à 14:03
ceci donne-t-il ce que tu veux, ou pas?
SELECT DEDI.[N° Compte], DEDI.TYPE, DEG.Activité, DEG.[Structure d'étude], DEG.Participation, DGA.Actionnariat, DGA.[Organe de décision], DGA.CMLT, DGA.CCT, DGA.EPS, DGA.Rééchelonnement, DEDI.[T/ EXPLOIT], DEDI.[T/ INVEST], DEDI.[T/ EXPLOIT], DGA.[Révision garanties/ réserves], DGA.Date
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° Compte] = DEG.[N° Compte]) LEFT JOIN DGA ON DEDI.[N° Compte] = DGA.[N° Compte] 
and DGA.Date = dmax("Date","DGA",  "[N° Compte]='" & DEDI.[N° Compte] & "'") ;
0
ca me donne une message d'erreur

pourquoi ,"DGA" est seul la sql

n y a t'il pas une erreur de saisie???????
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557 > amo-51
Modifié le 7 août 2017 à 14:29
quel message d'erreur?
chez moi, cela fonctionne dans le fichier que tu as envoyé:
SELECT DEDI.[N° Compte], DEDI.TYPE, DEG.Activité, DEG.[Structure d'étude], DEG.Participation, DGA.Actionnariat, DGA.[Organe de décision], DGA.CMLT, DGA.CCT, DGA.EPS, DGA.Rééchelonnement, DEDI.[T/ EXPLOIT], DEDI.[T/ INVEST], DGA.[Révision garanties/ réserves], DGA.Date
FROM (DEDI LEFT JOIN DEG ON DEDI.[N° Compte] = DEG.[N° Compte]) LEFT JOIN DGA ON (DGA.Date = dmax("Date","DGA",  "[N° Compte]='" & DEDI.[N° Compte] & "'")) AND (DEDI.[N° Compte] = DGA.[N° Compte]);
0
essayer de passer en mode création

vous avez inversez dedi et dga dans and
0
SELECT NOM_client from table1 UNION SELECT NOM_client from Table2 UNION SELECT Nom_client FROM Table3 


Ce n'est pas à un vieux singe qu'on apprend à faire des grimaces
-1
Bonjour
C'est une solution
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
1 août 2017 à 12:35
Bonjour;

je n'ai pas compris ton sql

tu me propose de ramener uniquement les noms de chacune des tables
0
castours > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
1 août 2017 à 22:37
bonjour
As tu essayé ma solution?
0
amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019 > castours
2 août 2017 à 10:57
mais je n'ai pas compris ta solution alors comment je pourrais l'essayer
0
castours > amo-51 Messages postés 94 Date d'inscription mercredi 21 septembre 2016 Statut Membre Dernière intervention 3 novembre 2019
2 août 2017 à 13:41
bonjour
ma solution consiste a faire 2 requete ajoute d'enregistrements.
par contre il faut que tes trois tables soient identiques en champs et format
si tu veux fait moi parvenir ta base compressée dans un lien de cjoint et je te ferai la manipe
0