Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1586 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  RESOLU [Access 2003] Requête jointure et union

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

RESOLU [Access 2003] Requête jointure et union

n°2056180
bpfonline
Posté le 11-02-2011 à 17:21:19  profilanswer
 

Bonjour,
 
Je coince sur un problème depuis un bon moment. Je vous expose ce que je veut faire. Regrouper les donnés de 3 tables comportant 2 champs avec une requête. Voici la structure des 3 tables :
 
Table 1              Table 2                    Table 3
Nom   Val1          Nom       Val2            Nom      Val3
A       12            A           48              A          62
B       10            C           69              B          19
C       32            D           78              D          23
D       50            G           67              F          21
E       55            H           18              G          11
 
Et je voudrais que la requête me donne le résultat suivant :
Nom    Val1       Val 2        Val 3
A        12         48            62
B        10                        19
C        32         69
D        50         78            23
E        55
F                                    21
G                    67            11
H                    18
 
Avec une requête UNION, chaque valeur dans le champ nom est dupliqué, sans "regroupement". car les enregistrements s'empilent à la suite sur 2 colonnes.
Avec une requête de jointure, je me rapproche de ce que je veut mais ça ne prend que les enregistrements qui sont en communs dans les 3 tables alors que je veut aussi les enregistrement qui se trouve isolés dans une table et non présents dans les autre.
 
Du coup je ne voit pas comment construire ma requête. J'utilise Access 2003.
J'ai lu qu'on pouvait faire des requêtes (Thêta) mais je ne sais pas si ça correspond à ma problématique, ni comment les faire.
J'espère que vous pourrez me donner la procédure ou des tutos sur ce problème.


Message édité par bpfonline le 12-02-2011 à 15:14:02
mood
Publicité
Posté le 11-02-2011 à 17:21:19  profilanswer
 

n°2056227
billgatesa​nonym
Posté le 11-02-2011 à 23:00:06  profilanswer
 

Il faudrait faire des jointures. Mais des jointures externes, des LEFT OUTER JOIN ou RIGHT OUTER JOIN, au lieu des INNER JOIN de base.
En choisissant la table 1 comme table principale de ces jointures, cela permettra de récupérer les cinq premières lignes de l'exemple.
Il manquera les 3 dernières lignes de l'exemple.
On pourra obtenir les 6e et 7e lignes en faisant un UNION avec une autre requête ayant des jointures externes dont la table principale sera la 3.
On pourra obtenir la 8e ligne de l'exemple en faisant un UNION avec encore une autre requête ayant des jointures externes, dont la table principale est la 2, cette fois-ci.
Pour éliminer les doublons, on fera un Select Distinct.

n°2056276
bpfonline
Posté le 12-02-2011 à 15:11:59  profilanswer
 

billgatesanonym a écrit :

Il faudrait faire des jointures. Mais des jointures externes, des LEFT OUTER JOIN ou RIGHT OUTER JOIN, au lieu des INNER JOIN de base.
En choisissant la table 1 comme table principale de ces jointures, cela permettra de récupérer les cinq premières lignes de l'exemple.
Il manquera les 3 dernières lignes de l'exemple.
On pourra obtenir les 6e et 7e lignes en faisant un UNION avec une autre requête ayant des jointures externes dont la table principale sera la 3.
On pourra obtenir la 8e ligne de l'exemple en faisant un UNION avec encore une autre requête ayant des jointures externes, dont la table principale est la 2, cette fois-ci.
Pour éliminer les doublons, on fera un Select Distinct.


 
Bonjour,
 
Merci beaucoup pour la réponse qui m'a bien aidé.  :)  :)  :)  
J'ai commencé par faire les 3 requêtes avec des jointures gauches à partir du champ Nom comme référence pour chacune des tables.
RQT1 Nom (Table1) pointant vers Nom (Table2) et Nom (Table3)
RQT2 Nom (Table2) pointant vers Nom (Table1) et Nom (Table3)
RQT2 Nom (Table3) pointant vers Nom (Table1) et Nom (Table2)
 
Une fois testées individuellement, je les aient regroupés dans une Requête UNION unique. En copiant/collant le SQL des mes 3 Requêtes.
Je n'ai pas eu besoin de faire un Distinct pour les doublons par dessus.
Voici le code que j'ai obtenue :

Code :
  1. SELECT Table1.Nom, Table3.Val3, Table2.Val2, Table1.Val1
  2. FROM (Table1 LEFT JOIN Table3 ON Table1.Nom = Table3.Nom) LEFT JOIN Table2 ON Table1.Nom = Table2.Nom;
  3. UNION
  4. SELECT Table2.Nom, Table3.Val3, Table2.Val2, Table1.Val1
  5. FROM (Table2 LEFT JOIN Table3 ON Table2.Nom = Table3.Nom) LEFT JOIN Table1 ON Table2.Nom = Table1.Nom;
  6. UNION
  7. SELECT Table3.Nom, Table3.Val3, Table2.Val2, Table1.Val1
  8. FROM (Table3 LEFT JOIN Table1 ON Table3.Nom = Table1.Nom) LEFT JOIN Table2 ON Table3.Nom = Table2.Nom;



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  RESOLU [Access 2003] Requête jointure et union

 

Sujets relatifs
Probleme de jointure sur une seule table sql[SQL] requete: combler les "vides" dans une table avec des donnees
[VBA Access]Changer taille et caractère dans un état[ACCESS] Problème jointure entre requêtes
[PHP] Jointure sur plusieurs champ ?[ACCESS 2007] faire un formulaire sur 3 tables
Requête PDO StatementChanger d'imprimante en VBA sous Access 2000
requete sql 
Plus de sujets relatifs à : RESOLU [Access 2003] Requête jointure et union


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR