Doublons requete 3 tables
unmaxdemily
Messages postés
8
Statut
Membre
-
Reivax962 Messages postés 3742 Statut Membre -
Reivax962 Messages postés 3742 Statut Membre -
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
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
1 réponse
-
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-
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. -
-