Problème de requête sql

Résolu
mohellebi - 26 nov. 2012 à 23:21
 mohellebi - 29 déc. 2012 à 17:25
Bonjour tout le monde
Depuis quelque temps je galère sur une petite requête sql qui est à priori très simple.
Je m'explique:actuellement je suis sur une application réalisée avec du vb 2008 qui utilise une db access.
Ma db utilise 3 table info, depense et recette.
dans la table info on trouve les informations personnel matricule,nom, prenom, adresse...ect.
table depense : matricule_dep, numero_piécedep ,montant_depense ,datedebut.
table recette : matricule_rec,numero_piecerec,montant_recette.
Mon souci est d'afficher le nom, le montant_depense et le montant_recette
Pour information, chaque personne est lié à une dépense par la clé (matricule)
la dépense et lié à la recette par le numero_piece.. , en revanche une personne n'a pas forcement une dépense ou une recette.
Ma requete est "SELECT nom,montant_depense,montantrecette FROM info,depense,recette WHERE id=matricule_dep and id=matricule_rec"

résultat

nom | montant-dep | montant_rec
--------------------------------------------
dupon | 1200 | 400
cristine | 1200 | 150

le problème est que crestine n'avait pas de montant_depense alors que la requete me duplique 1200 au lieu d'un 0

j'aimerai avoir

nom | montant-dep | montant_rec
--------------------------------------------
dupon | 1200 | 400
cristine | 0 | 150

Merci d'avance pour toute personne qui aura au moins le temps de lire mon message et de rependre si possible, je suis vraiment dans la galère

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
27 nov. 2012 à 10:07
Salut

Oui, c'est normal.
Tu tentes d'afficher sur une même ligne des données qui peuvent être multiples ou inexistantes.
Il n'y a pas de lien possible entre les données détaillées des dépenses et recettes.
Par contre, tu dois pouvoir demander les totaux de ces tables.

La seule solution est la suivante : Faire 2 requètes :
- Une requète pour lire les dépenses liées à info
- Une requète pour lire les recettes liées à info
puis, une relecture du premier RecordSet et la recherche dans le second pour mettre en tableau les lignes correspondantes, si elles existent.

Par souci de précision, note que dans une requète à plusieurs tables, il est fortement recommandé de rappeler le nom de la table d'appartenance devant chaque champ, pour que le moteur n'ait pas à se poser la question et fasse des choix 'logiques' qui peuvent dérailler.
Exemple avec ta requète originale :
SELECT info.nom,
       depense.montant_depense,
       recette.montantrecette
  FROM info, depense, recette
 WHERE info.id=matricule_dep 
   and info.id=matricule_rec

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
merci jack pour la repense qui me sert de base logique pour tous le reste de mes requetes
0
Rejoignez-nous