Requête SQL : faire un SELECT en tenant compte des champs vides

Résolu
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 - 13 oct. 2009 à 09:04
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 - 13 oct. 2009 à 14:34
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 oct. 2009 à 12:51
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)
3
cs_Papymuzo Messages postés 169 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 17 août 2010 1
13 oct. 2009 à 14:34
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 ;)
0
Rejoignez-nous