Requête trois tables
amo-51
Messages postés
94
Date d'inscription
Statut
Membre
Dernière intervention
-
amo-51 -
amo-51 -
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
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:
- Access relation entre 3 tables
- Ai suite 3 - Télécharger - Optimisation
- Tables des matières word - Guide
- Picasa 3 - Télécharger - Albums photo
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- 3 à l'envers ✓ - Forum Windows
16 réponses
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
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
merci pour votre réponse
je viens de vérifier les jointures
mais apparemment ce n'est pas ca le problème
je viens de vérifier les jointures
mais apparemment ce n'est pas ca le problème
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, peux-tu partager le code SQL de ta requête?
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?]));
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?]));
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
y t il des risques de doublon.
Supprime les clés primaires Faits des requetes ajout pour fusionner les trois tables
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
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] ...
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
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
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
tu avais raison, la relation précédente n'était pas correcte.
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.
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 :
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
Je m'immisce,
mais je commencerais par renommer ces xxxxxxx champs avec des "°", ya rien de tel pour mettre le bouz...
A+
mais je commencerais par renommer ces xxxxxxx champs avec des "°", ya rien de tel pour mettre le bouz...
A+
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
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]
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
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
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)
il s'agit de l’intégrité référentiel (le contenu des tables)
bonjour
c'est fort possible mais peut tu me faire parvenir ta base a castours arobase club-internet.fr.
Je verrai mieux ton probleme
c'est fort possible mais peut tu me faire parvenir ta base a castours arobase club-internet.fr.
Je verrai mieux ton probleme
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
ceci fonctionne:
et il y a des doublons dans ta table DGA
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
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] & "'") ;
quel message d'erreur?
chez moi, cela fonctionne dans le fichier que tu as envoyé:
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]);
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