Erreur de jointure sql

Fermé
sabdoul - Modifié par sabdoul le 14/06/2013 à 11:24
 sabdoul - 21 août 2013 à 10:39
Bonjour, J'ai une sql qui me donne des résutats erronés comme s'il additionnait ou multipliait le résultat plusieurs fois car les valeurs retournées sont trop élevées. or en regardant ma syntaxe je la trouve logique.
SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION "Designation",
to_char(NVL(round(sum(t.QTE_VEN)),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Vendue",
to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "C.A.H.T",
to_char(NVL( round(sum(t.MARGE_HT)),0) ,'999G999G999G999', 'nls_numeric_characters='', ''') "Marge HT",
to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Qte Stock",
to_char(NVL(round(sum(s.VALEUR_PRIX_REV) ),0),'999G999G999G999', 'nls_numeric_characters='', ''') "Valeur du stock"
FROM PRODUIT e
LEFT OUTER JOIN VENTE_JOUR t
ON(e.CODE_PRODUIT=t.CODE_PRODUIT AND t.DATE_GENERATION BETWEEN '". $_POST['date'] . "' AND '" . $_POST['date1'] . "')
LEFT OUTER JOIN STOCK s
ON(e.CODE_PRODUIT=s.CODE_PRODUIT AND s.DATE_GENERATION ='". $_POST['date1'] . "' )
GROUP BY e.CODE_PRODUIT,e.DESIGNATION ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC;
cette requête doit me retourner les valeur vente,stock restant etc.. des différents produits. mais elle me donne un résultat trop élevé . quelqu'un aurait-il pas un idée où une autre solution. merci d'avance

2 réponses

BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
20 août 2013 à 22:09
Bonsoir sabdoul ,

Il te manque la relation entre STOCK et VENTE_JOUR d'où le produit cartésien que tu obtiens.

Conseil :
Si tu fais des jointures entre tables et que tu obtiens trop de résultats, il faut chercher la jointure qui manque.
0
merci j'ai trouvé la solution en utilisant un CTE
0