Requête SQL : faire un SELECT en tenant compte des champs vides [Résolu]

Signaler
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
-
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
-
Salut à tous et à toutes,

Je suis confronté à un problème assez embêtant dont voici une explication (simplifiée) :

***
*****
***

Sur une base Access, j'ai trois tables : A, B et C.

La A est en relation avec la B, et la B avec la C de la façon suivante :

TABLE A :
ID_A



---

TABLE B :
ID_B


#ID_A <-- clef étrangère qui pointe vers la table A

---

TABLE C :
ID_C


#ID_B <-- clef étrangère qui pointe vers la table B

---

Nous nous retrouvons donc avec le "schéma" suivant :

A <-- B (via #ID_A) <-- C (via #ID_B)

***
*****
***

Le but de la manoeuvre est de récupérer TOUTES les entrées de A dans une table d'un DataSet.

---

Voici pour l'instant ma requête :

SELECT * FROM A, B, C
WHERE A.ID_A = B.ID_A
AND B.ID_B = C.ID_B

---

Problème : je récupère uniquement les entrées de la table A qui ont une relation avec la table B et C (via #ID_A et #ID_B).
Donc si j'ai une ligne dans ma table A sans relation avec la table B ni C, je ne verrai pas apparaître cette ligne !

---

=> comment faire pour récupérer absolument TOUTES les entrées de ma table A, en tenant compte "des champs vides" ?

---

Je vous remercie,

-Papymuzo-

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
Oui, c'est une réaction normale puisque tu demandes à trouver des lignes de A qui ont un lien avec B, puis C.
Si tu ne veux que les champs de A qui n'ont pas de lien avec B, il faut faire une seconde requète du genre :
Select * From A Where A.ID_A Not In (Select B.ID_A From B)
(à approfondir car je crois que Access n'accepte pas les Select à l'intérieur d'un IN)

Sinon, pour avoir tous les champs, il te faut faire 3 requètes/recordsets simples, sans condition, comme "Select * From A" et traiter la jointure manuellement lors du listage des RecordSets pour l'affichage de tes données.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
169
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
17 août 2010
1
Merci pour ta réponse, je ne vois pas comment utiliser le Not In par contre je n'avais pas pensé à faire les jointures manuellement entre mes tables du DataSet..

Je vais essayer de faire ça, ça fait pas mal de lignes à changer mais c'est vrai qu'après le résultat sera vraiment meilleur !
En plus j'avais besoin de faire des SELECT DISTINCT donc la je pourrai tout faire à ma sauce :D

Merci et bonne aprem ;)