Trappola
Fan-out delle join
Unire due tabelle uno-a-molti moltiplica le righe, e le somme crescono con loro.
Un ordine con 3 righe e 2 pagamenti dà 6 righe quando fai la join con entrambe: ogni riga viene contata due volte. Aggrega prima ogni tabella figlia alla granularità dell'ordine, poi fai la join dei risultati.
La trappola
SELECT o.order_id, SUM(l.quantity * l.unit_price) AS ordered FROM orders o JOIN order_lines l ON l.order_id = o.order_id JOIN payments p ON p.order_id = o.order_id WHERE o.order_id = 14 GROUP BY o.order_id;
| order_id | ordered |
|---|---|
| 14 | 235.00 |
La correzione
SELECT o.order_id, SUM(l.quantity * l.unit_price) AS ordered FROM orders o JOIN order_lines l ON l.order_id = o.order_id WHERE o.order_id = 14 GROUP BY o.order_id;
| order_id | ordered |
|---|---|
| 14 | 117.50 |