cs_Papymuzo
Messages postés169Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention17 août 2010
-
13 oct. 2009 à 09:04
cs_Papymuzo
Messages postés169Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention17 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-
A voir également:
Requête SQL : faire un SELECT en tenant compte des champs vides
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Papymuzo
Messages postés169Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention17 août 20101 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