Doublons requete 3 tables

Fermé
unmaxdemily Messages postés 7 Date d'inscription jeudi 7 février 2008 Statut Membre Dernière intervention 22 novembre 2016 - 22 nov. 2016 à 10:56
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 23 nov. 2016 à 10:32
Hello,

Je n'arrive pas à jointurer trois tables entre elles, ça me donne systématiquement des doublons. Pour faire simple, voici mes trois tables :
Commande :
cde_id | article | montant
10 | 100 | 50€
10 | 200| 10€

retour_cde :
cde_id | retour_id | date
10 | A | 1-nov
10 | B | 4-nov

retour:
retour_id | article | montant
A | 100 | 10€
A | 200 | 5€
B | 100 | 15€
B | 200 | 5€

il faut que j'enlève les montants de retour à mes commandes, mais avec ma requête j'obtiens systématiquement des doublons, je voudrais passer par une seule requête (avec deux requêtes, pas de problème)
requête :
select commande.cde_id, commande.article, sum(commande.montant)-sum(retour.montant)
from commande, retour_cde, retour
where commande.cde_id = retour_cde.cde_id
and retour_cde.retour_id = retour.retour_id and commande.article = retour.article


Merci de votre aide

Emily
A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 nov. 2016 à 11:49
Bonjour,

Il est surprenant d'utiliser des SUM sans utiliser un GROUP BY dans ce contexte.
Je peux te suggérer la requête suivante :
SELECT c.cde_id, c.article, SUM(c.montant)-SUM(COALESCE(r.montant, 0))
FROM commande c
LEFT OUTER JOIN retour_cde rc ON rc.cde_id = c.cde_id
LEFT OUTER JOIN retour r ON r.retour_id = rc.retour_id AND r.article = c.article
GROUP BY  c.cde_id, c.article
ORDER BY  c.cde_id, c.article


Xavier
0
unmaxdemily Messages postés 7 Date d'inscription jeudi 7 février 2008 Statut Membre Dernière intervention 22 novembre 2016 1
22 nov. 2016 à 16:37
en fait, mon exemple est beaucoup plus simple que la realité , et effectivement dans l'exemple, j'ai oublié le group by!
merci pour ton aide xavier, mais malheureusement, les données sont toujours doublées.
Comme la commande "10" est présente deux fois dans ma table retour_cde, les données sont multipliées par 2.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
23 nov. 2016 à 10:32
Bonjour,

La requête, telle quelle est, doit donner une ligne par commande ET par article.
Ce n'est pas ce que tu veux ?
Peux-tu me donner un exemple de résultat qui ne te va pas, et le résultat que tu souhaiterais ?

Xavier
0