bpfonline | 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 :
- SELECT Table1.Nom, Table3.Val3, Table2.Val2, Table1.Val1
- FROM (Table1 LEFT JOIN Table3 ON Table1.Nom = Table3.Nom) LEFT JOIN Table2 ON Table1.Nom = Table2.Nom;
- UNION
- SELECT Table2.Nom, Table3.Val3, Table2.Val2, Table1.Val1
- FROM (Table2 LEFT JOIN Table3 ON Table2.Nom = Table3.Nom) LEFT JOIN Table1 ON Table2.Nom = Table1.Nom;
- UNION
- SELECT Table3.Nom, Table3.Val3, Table2.Val2, Table1.Val1
- FROM (Table3 LEFT JOIN Table1 ON Table3.Nom = Table1.Nom) LEFT JOIN Table2 ON Table3.Nom = Table2.Nom;
|
|