Debug ~1 min de lecture
Éviter de compter deux fois un montant après une jointure
Un total SQL double après une jointure ? Les données ne sont pas forcément en double.

Une commande de 100 CHF contient deux lignes. Après une jointure entre commandes et lignes, le montant de la commande apparaît dans deux résultats. Appliquer SUM(c.total) à ces résultats donne 200 CHF.
Le premier soupçon peut être une commande enregistrée en double. Pour le vérifier, comparer les résultats avant et après la jointure. Si un même identifiant de commande apparaît une fois avant et deux fois après, la relation un-à-plusieurs explique la multiplication du montant.
Si la jointure sert uniquement à sélectionner les commandes ayant au moins une ligne, utiliser EXISTS : SELECT SUM(c.total) FROM commandes c WHERE EXISTS (SELECT 1 FROM lignes l WHERE l.commande_id = c.id); Cette condition vérifie la présence d’une ligne sans multiplier les commandes à additionner.
Une jointure peut multiplier les lignes : vérifier ce que chaque ligne représente avant de calculer une somme.